ファイルに改行文字を含むパターンがあります。
client_encryption_options:
enabled: false
...enabled
に設定したいが、以下の項目でなければなりません。true
enabled
client_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
はい変える。