私が望むのは、一致するものを見つけて、次の行の文字の後のすべての項目を置き換えることです。
ファイル内容の例:
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 拡張です。