0

我有一个文件,其中包含如下所示的行块:

some lines

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

some other lines

我正在尝试找到一个 perl 单行代码,以便在该行之后添加param.3一个新行(好吧,编号最高的参数),就像"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 
4

2 回答 2

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

“你想要它在一行?它必须适合 80 列吗?” ——拉里·沃尔

于 2013-07-18T21:20:20.617 回答
0
/usr/bin/perl -i -pe 'BEGIN{undef $/;}; s/((param\.(\d+)=\S+\s)+)/$1."param.".($3+1)."=valueXXX\n"/ems' /tmp/myfile.txt
于 2013-07-19T11:33:32.987 回答