ほとんどの構成管理ソフトウェアツールには、ファイルのブロックを置き換える方法があります。
例:
私はこれらの大きなツールのオーバーヘッドなしでこれを正確に望んでいました。
テキストファイルのブロックを更新して維持する簡単なツールはありますか?
例:更新したいです。/etc/some-server/some-server.conf
次のようなブロックを挿入/更新したいと思います。
## start my-block
key1=value1
key2=value2
## end my-block
私はawkやPythonをいくつかの行でこれを行うことができることを知っていますが、あらかじめ作成されたツールを検索しました。
答え1
Sedはテキストの交換に適しています。これをテストするためにbashシェルにアクセスすることはできません。
sed '/in lines containing this/cut this/paste this/' in.file >out.file
また、代替 "s/this/that/" 形式を使用し、一連のパイプコマンドに最適です。
答え2
これがどれほど簡単かは、ツールが非名目条件でどのように機能するかによって異なります。ファイルに常に特別なコメントがあるブロックがある場合は、awkを使用すると十分簡単です。
awk '
/^## end my-block$/ {skip=0}
!skip {print}
/^## start my-block$/ {skip=1; system("cat new-block-content") || exit(1)}
' </etc/some-server/some-server.conf >/etc/some-server/some-server.conf.new &&
mv /etc/some-server/some-server.conf.new /etc/some-server/some-server.conf
そのブロックがまだない場合、最後に追加しようとしてもそれほど難しくありません。
awk '
/^## end my-block$/ {skip=0}
!skip {print}
/^## start my-block$/ {skip=1; system("cat new-block-content") || exit(1)}
END {print "## start my-block"; system("cat new-block-content") || exit(1); print "## end my-block"}
' </etc/some-server/some-server.conf >/etc/some-server/some-server.conf.new &&
mv /etc/some-server/some-server.conf.new /etc/some-server/some-server.conf
他のシナリオ(例:開始コメントはありますが、終了コメントがない、または複数のブロック...)を処理することがますます困難になっています。