テキストを複数行のパターンに置き換える

テキストを複数行のパターンに置き換える

ファイルに改行文字を含むパターンがあります。

client_encryption_options:
    enabled: false

...enabledに設定したいが、以下の項目でなければなりません。trueenabledclient_encryption_options

grepを使用すると、複数行を検索できません。この目標をどのように達成できますか?

答え1

まあ、grepこれを修正することもできないので、このユーティリティは最初から実行可能ではありません。

代わりにGNUを使用してくださいsed

$ sed '/^client_encryption_options:/,+1s/enabled:.*/enabled: true/' file

次に、文字列で始まる行を見つけ、その行client_encryption_options:と次の行に置換を適用します。置換は、enabled:文字列と同じ行の後に続くすべての項目を置き換えますenabled: true

置換は両方の行に適用されますが、enabled:.*最初の行でパターンが見つからないため、変更されていません。 2行目は(次のテキストに関係なくenabled:)無条件に変更されます。

答え2

そしてsed

sed '/client_encryption_options:/{n;s/false/true/;}'

n取得する命令です。Next行がパターンスペースに入ります(現在のパターンスペースの内容を印刷して破棄した後)、sはい変える

関連情報