Perl:在与模式匹配的最后一行之后追加一行(但是增加模式的一部分)

时间:2013-07-18 18:19:00

标签: perl

我的文件包含一行看起来像这样的行:

some lines

param.1=valueA
param.2=valueB
param.3=valueC

some other lines

我正在尝试在param.3行(以及编号最高的参数)之后添加一个perl单行添加新行"param.4=valueD" 我已经尝试了几个"perl -i -pe"命令但是无法执行它。 我非常想要替换自己找到的最后一个匹配线+一个新的线,我会在其中增加一个值。

示例(我还没有找到如何进行增量)

==#> cat /tmp/myfile.txt 
param.1=valueA 
param.2=valueB 
param.3=ValueC 
==#> perl -pe 'BEGIN{undef $/;} s/((param\.(\d+)=\S+\s+)*)/\1param.\3=newvalue\n/ms' /tmp/myfile.txt 
param.1=valueA 
param.2=valueB 
param.3=ValueC 
param.3=newvalue 

2 个答案:

答案 0 :(得分:0)

perl -pe '$matched = /^param\.(\d+)=value/ and $num = $1;
          $num and ! $matched
               and $_ = "param.$last=valueD\n$_"
               and undef $num;' myfile.txt

“你想要它在一条线上?它是否必须适合80列?” - Larry Wall

答案 1 :(得分:0)

/usr/bin/perl -i -pe 'BEGIN{undef $/;}; s/((param\.(\d+)=\S+\s)+)/$1."param.".($3+1)."=valueXXX\n"/ems' /tmp/myfile.txt