如何用sed替换YAML配置文件中的指定键值?
替换YAML配置中指定字段的值
你的sed命令失效是因为/^parameters:/{n;...}仅会处理parameters:的下一行,而build_image_tag在该字段下的第三行,根本没被匹配到。下面提供两种可行方案:
方案一:修正sed命令
利用sed的范围匹配功能,锁定parameters块内的行进行替换:
sed '/^parameters:/,/^[^ ]/{s/^ build_image_tag:.*/ build_image_tag: "latest"/}' exec.yml
/^parameters:/,/^[^ ]/:匹配从parameters:行开始,到下一个非缩进顶级字段行结束的范围s/^ build_image_tag:.*/ build_image_tag: "latest"/:在范围内替换缩进为2个空格的build_image_tag行内容
如果需要直接修改原文件,添加-i参数(Linux与macOS写法有差异):
# Linux sed -i '/^parameters:/,/^[^ ]/{s/^ build_image_tag:.*/ build_image_tag: "latest"/}' exec.yml # macOS sed -i '' '/^parameters:/,/^[^ ]/{s/^ build_image_tag:.*/ build_image_tag: "latest"/}' exec.yml
方案二:使用yq工具(推荐)
YAML是结构化数据,用专门的YAML处理工具yq比sed更可靠,能避免文本匹配带来的格式问题。
安装完成后,执行以下命令即可修改字段值:
# 预览修改结果(不改动原文件) yq eval '.parameters.build_image_tag = "latest"' exec.yml # 直接修改原文件 yq eval -i '.parameters.build_image_tag = "latest"' exec.yml
修改后的配置如下:
application: "app_name" pipeline: "app-pipeline" parameters: spinnaker_environment: "production" perform_cleanup: false build_image_tag: "latest"
内容的提问来源于stack exchange,提问作者Riley Hun
相关产品推荐
相关产品推荐

