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 扩展。

相关内容