テキストファイルセクションに2行を追加する

テキストファイルセクションに2行を追加する

セクションに分割されたテキストファイルがあります。各セクションは[keyword]で始まり、空白行で終わります。このような:

[keyword1]
param1 = value1
param2 = value2
param3 = value3

[keyword2]
param4 = value4
param5 = value5
...

与えられた[keyword]

param = value

sed念のため、内部編集とファイルバックアップコピーの使用を検討しています。

答え1

はい、sed正しい選択のようです。

sed -i.bak '/^\[keyword1\]/aparam = value\nparam = other' your.file

awk内部編集部分を除いて実行できます。

awk '1;/^\[keyword1\]/{print"param = value";print"param = other"}' your.file > new.file

perl次のような小さな作業に大きな銃を使用しても大丈夫なら:

perl -i.bak -pe '$_.="param = value\nparam = other\n"if/^\[keyword1\]/' your.file

後者はruby1つの文字修正後に機能します。

ruby -i.bak -pe '$_+="param = value\nparam = other\n"if/^\[keyword1\]/' your.file

python解決策は少し長いです(おそらく私の弱い知識のために悪化したでしょう):

python -c 'import sys,fileinput;[sys.stdout.write(line+("param = value\nparam = other\n" if line=="[keyword1]\n" else "")) for line in fileinput.input(inplace=1,backup=".bak")]' your.file

今回も内部編集はできませんが、次のようbashkshすることも可能です。

while IFS='' read -r line; do
  echo "$line"
  [[ "$line" == '[keyword1]' ]] && {
    echo "param = value"
    echo "param = other"
  }
done < your.file > new.file

内部ed編集は簡単ですが、バックアップの作成方法がわかりません。

ed -s your.file <<< $'/^\[keyword1\]/a\nparam = value\nparam = other\n.\nwq'

答え2

エディタとして使用する場合は、次のようにvim略語を設定できます。.vimrc

:abbr key1 [keyword1]^M^Iparam1 = value1^M^Iparam2 = value2^M^Iparam3 = value3^M
:abbr key2 [keyword2]^M^Iparam4 = value4^M^Iparam5 = value5^M

これで、どのファイルでも挿入モードで入力し、をタップするとkey1次のようにenterなります。

[keyword1]
       param1 = value1
       param2 = value2
       param3 = value3

これが繰り返される場合、vim略語を使用することはそれほど苦痛ではないかもしれません。

関連情報