我想要做的是找到一个匹配项,然后替换下一行中字符之后的所有内容。
文件内容示例:
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 扩展。