Bashスクリプトでこの複数行パターンをどのように照合して置き換えることができますか?

Bashスクリプトでこの複数行パターンをどのように照合して置き換えることができますか?

ファイルがありますが、jail.local次のセクションがあります。

[apache]

enabled = true
logpath = /var/log/apache/error.log

[ssh]

enabled = false
port = ssh

欲しい

  • 一致文字列の[ssh]合計
  • 下の文字列の2行で置換を実行します。つまり、
    • enabled = false到着
    • enabled = true

だから新しいテキストは

[ssh]

enabled = true
port = ssh

私は使い方を見ましたが、この問題を解決するために必要なコマンドがむしろ「1行あたり」指向であることを理解するsedことはできません。この交換作業を実行するにはどうすればよいですか?sed

答え1

GNU sedの使用:

sed -e '/\[ssh\]/,+2{s/false/true/}' file

POSIX sedの使用:

sed -e '/\[ssh\]/n;n;s/false/true/' file

関連情報