しばらく前に同様の質問をしましたが、うまく機能しないのに苦労しています。
次のように構成ファイルを変更するためのスクリプトを作成しています。
[Thing1]
[[subthingA]]
this = 0
that = string
and = localhost
the = 80
other = 0
thing_ading = /path/to/a/dir
[Thing2]
[[subthingB]]
this = 0
thing_ading = /path/to/dir
here = 0
これにはN個の[モノ]があり、通常は同じキーおよび/またはキー/値ペアの値があり、[[サブアイテム]]の下のキー/値ペアは正確に8マスインデントされています。私は特に、thing_ading
以下の値をSubthingB
別のディレクトリパスに変更するawk/sed/grep/tr/cut/perlを使用して1行のコードを作成しようとしています。
すべてを編集してthing_adings
特定のペアをターゲティングできますが、空白が原因で問題が発生します。
ベストアンサー1
sed
これらの問題を解決するには、範囲演算子を使用できます,
。
sed -e '
/^\[Thing2]$/,/^$/!b
/^[[:blank:]]\{4\}\[\[subthingB]]/,/^$/s|^\([[:blank:]]\{8\}thing_ading\) = .*|\1 = /YOUR/NEW/PATH/TO/DIR|
' yourinifile
- まず、誤った範囲をスキップして正しい範囲を選択してください。
- その後、適切なスコープにあるときに、必要なthing_ding変数に対して置換を実行できます。