次の内容を含むテキストファイル名があります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
に新しい項目がある場合、新しい項目が追加されると、数値が自動的に増加する必要があります。希望の出力LETTER
whitelist
[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