0

次のような行のブロックを含むファイルがあります。

some lines

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

some other lines

いくつかのコマンドを試しましたが、実行できなかったように、行の直後に追加する perl ワンライナーを見つけようとしていますparam.3(まあ、最大の数値を持つパラメーター) 。行で見つかった最後の一致をそれ自体で置き換え、値をインクリメントする新しい行を 1 つ置き換えたいと考えています。"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
/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 に答える
0
perl -pe '$matched = /^param\.(\d+)=value/ and $num = $1;
          $num and ! $matched
               and $_ = "param.$last=valueD\n$_"
               and undef $num;' myfile.txt

「1行でいいですか?80列に収まらなければなりませんか?」-- ラリー・ウォール

于 2013-07-18T21:20:20.617 に答える