セクションに分割されたテキストファイルがあります。各セクションは[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
後者はruby
1つの文字修正後に機能します。
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
今回も内部編集はできませんが、次のようbash
にksh
することも可能です。
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
略語を使用することはそれほど苦痛ではないかもしれません。