如果我使用正则表达式匹配字符串,我可以更改不同行中的字符串吗?基本上,如果存在foo
,我想将bar
更改为soap
。 bar
出现在文本文件的其他行中。 foo
,如果存在,将始终显示在bar
之前。
while (<FILE>) {
if (m/foo/){
s/bar/soap/;
}
}
数据文件:
foo
food
red
bar
blue
答案 0 :(得分:5)
当您的if
语句匹配时,$_
的值尚未更改。 m//
已匹配的行与您尝试s///
搜索和替换的行相同。相反,你需要设置一个标志,一旦新线被击中,你可以稍后检查:
open my $fh, '<', $filename or die "Cannot open $filename: $!\n";
my $flag = 0;
while (my $line = <$fh>) {
$flag = 1 if $line =~ /foo/;
$line =~ s/bar/soap/ if $flag;
}