2013-07-18 20 views
0

我已經包含行的塊看起來像這樣的文件:的Perl:追加模式匹配的最後一行後面的線(但圖案的一部分遞增)

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 
+1

請向我們展示您採取的一些方法。 – simbabque

+0

例(其中我還沒有找到如何做增量) ==#>貓/tmp/myfile.txt param.1 =值a param.2 = VALUEB param.3 = ValueC == #>/usr/bin/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 – burgergold

+1

爲什麼它必須是單線程?像這樣的東西最好用一個小腳本來完成。有機會,你會稍後重複使用它。 – shawnhcorey

回答

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

相關問題