假设我有一个文件,其中包含以下几行
Hello abc
hii
how are you
Hello abc
如果我想用xyz代替abc的第二次出现,该怎么办?
我想要类似的输出
Hello abc
hii
how are you
Hello xyz
我尝试做perl -pi -e 's/abc/xyz/ if $. == 2' filename
。它对我不起作用。有人可以帮我吗?
答案 0 :(得分:3)
perl -i -pe's/abc/ ++$count == 2 ? "xyz" : "abc" /eg' file
即使abc
每行出现多次,此方法也有效。
答案 1 :(得分:2)
计算abc
出现的次数,如果等于2,则等于2:
perl -i -pe'$found++ if /abc/; s/abc/xyz/ if $found ==2' filename
答案 2 :(得分:0)
我已将其作为脚本完成。第一个参数是模式,第二个参数是替换,第三个参数是重复次数,第四个是文件,您也可以省略文件并插入标准输入数据。
#!/usr/bin/env perl
use v5.28;
my $patt = shift;
my $rep = shift;
my $nth = shift;
my $reps = 0;
while (<>) {
$reps++ if /$patt/;
s/$patt/$rep/ if (/$patt/ && $reps == $nth);
print $_;
}