テキストブロックに行を追加して、前の行の値を増やします。

テキストブロックに行を追加して、前の行の値を増やします。

次の内容を含むテキストファイル名がありますclass.txt

[serverClass:MAIL]
whitelist.0=LATE
whitelist.1=ONTIME

[serverClass:LETTER]
whitelist.0=FIRST
whitelist.1=SECOND
whitelist.2=THIRD
whitelist.3=FOURTH

[serverClass:NOTES]
whitelist.0=TEST
whitelist.1=CAR
whitelist.2=SPOON
whitelist.3=GAME

ブロックの1つに新しい行を追加したいとします。たとえば、ブロックSAMPLEに新しい項目がある場合、新しい項目が追加されると、数値が自動的に増加する必要があります。希望の出力LETTERwhitelist

[serverClass:MAIL]
whitelist.0=LATE
whitelist.1=ONTIME

[serverClass:LETTER]
whitelist.0=FIRST
whitelist.1=OLD
whitelist.2=NEW
whitelist.3=FOURTH
whitelist.4=SAMPLE

[serverClass:NOTES]
whitelist.0=TEST
whitelist.1=CAR
whitelist.2=SPOON
whitelist.3=GAME

これを行う方法はありますかsed

ベストアンサー1

Ralphの答えに対する私の意見で述べたように、これにはより良いツールがあります。たとえば、awk段落モードを使用しwhitelist.0=SAMPLE、ブロックが空の場合は追加し、それ以外の場合は抽出しないことがあります。最後のフィールド(この場合は行)で始まり、whitelist.NR+1=SAMPLEブロックに追加します。

awk -vRS= -vORS='\n\n' 'BEGIN{z="whitelist.0=SAMPLE";FS="\n"}
/LETTER/{if (/[0-9]=/){split($NF, a, /[.=]/);sub(/0/, a[2]+1, z)}
sub (/$/,"\n"z ,$0)};1' infile

おすすめ記事