假设我有一个包含这几行的文件
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
。它不适合我。谁能帮我这个?
perl -i -pe's/abc/ ++$count == 2 ? "xyz" : "abc" /eg' file
即使abc
每行出现不止一次,这也有效。
计算abc
出现的时间数,如果等于2,则计数:
perl -i -pe'$found++ if /abc/; s/abc/xyz/ if $found ==2' filename
我把它做成了一个脚本。第一个参数是模式,第二个是替换,第三个是重复次数,第四个是文件,你也可以省略文件并插入数据vístdin。
#!/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 $_;
}