我的要求是用第二组单词替换给定文本文件中的一组单词,这可能是从命令行或另一个文件中给出的。想要使用 Perl 来执行此操作,因为我的其余代码也在 Perl 中。
所以,如果我有以下内容:
server name="${server1}" host="abc.com"
server name="${server2}" host="webcs.com"
server name="${server5}" host="httpvcs1.com"
server name="${server6}" host="xyz.com"
server name="${server7}" host="msg.com"
我想用一组不同的词替换字符串“server1”、“server2”、“server5”等。这些可以放在另一个文件中或从命令行给出(以更可行的为准)。
此外,如果我想用"file"替换“服务器”一词,而不仅仅是“server1”、“server2”等,我将如何为这个替换制作一个正则表达式?
perl -pie 's/server\d{1-3}/myword/g' loginOut.txt > loginOut1.txt
以上将用“myword”替换所有单词。但我只想替换子字符串。
最佳答案
第二个问题的正则表达式是 s/server/myword/g;
。匹配(并替换)任何出现的“服务器”。
要用不同的字符串替换 server1、server2 等,您可以有一个包含替换规则的文本文件,例如:
server1 abcd
server2 bcde
server3 cdef
etc.
例如,您可以将文件中的日期读入哈希,
my %dict;
while(<DICTFILE>){
/(\S+)\s+(\S+)/;
$dict{$1}={$2};
}
然后进行替换:
while(my $line = <>){
foreach my $s (keys %dict){
$line =~ s/$s/$dict{$s}/g;
}
print $line;
}
关于regex - 如何用 Perl 中的另一组替换文件中的一组单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/351784/