Bash、文字列一致後の次の行の文字の後のすべての内容を置き換える

Bash、文字列一致後の次の行の文字の後のすべての内容を置き換える

私が望むのは、一致するものを見つけて、次の行の文字の後のすべての項目を置き換えることです。

ファイル内容の例:

  super_service:
    app_version: 1.02
  duper_service:
    app_version: 4.0.1
  happy_service:
    app_version: 2.03
  turbo_service:
    app_version: 1.28.0

期待される結果:私が望むのは、duper_serviceの例を一致させ、次に「app_version:」の後のすべてを私が定義した新しいバージョン(4.0.2など)に置き換えることです。 awkを使用してこれを実行できますが、変更をファイルに書き込む必要があります。

答え1

次のように動作するようです。

sed -i '/duper_service/!b;n;c\ \ \ \ app_version: 4.0.2' file.txt

答え2

sed良い候補のようです:

sed -i '/^[[:space:]]*duper_service:/ { N; s/[^:]*$/ 4.0.2/ }' file.txt

説明:「duper_service:」行が表示されると、行の終わりに関係なく次の行が追加され、コロンの後の()が[^:]*$「4.0.2」に置き換えられます。

この-iオプションはファイルをその場で変更します。 GNU sed 拡張です。

関連情報