如何使用yq索引带---分隔符的多文档YAML文件
多文档YAML的yq修改方案
你遇到的问题是因为带---分隔的YAML属于多文档YAML,不同yq版本对这类文件的处理语法不同,结合你报错里的jq提示,以下是对应解决方法:
针对kislyuk/yq(python-yq,依赖jq)
这个版本默认逐个处理单文档,不会自动把多文档转为数组,所以直接用.[0]会触发jq的索引错误。需要添加-s(--slurp)参数将所有文档合并为数组后再修改:
yq -i -y -s '.[0].hello = "world"' ./$PATH
要修改第二个文档,把索引换成1即可:
yq -i -y -s '.[1].hello = "foo"' ./$PATH
针对mikefarah/yq v4+(当前主流的Go版yq)
这个版本对多文档的处理更灵活,有两种常用方式:
方式1:通过文档索引选择修改
yq -i 'select(documentIndex == 0).hello = "world"' ./$PATH
缩写di可以替代documentIndex,写法更简洁:
yq -i 'select(di == 0).hello = "world"' ./$PATH
方式2:转为数组操作
同样可以用-s参数把多文档转为数组后修改:
yq -i -s '.[0].hello = "world"' ./$PATH
验证结果
修改后你的YAML文件会变成:
hello: world --- hello: null
内容的提问来源于stack exchange,提问作者mberge
相关产品推荐
相关产品推荐

