yq解析器条件语句问题:YAML指定字段更新时内容丢失或语法报错
解决yq修改YAML字段时的结构丢失/语法错误问题
问题原因
- 你第二条命令未加
-i参数,yq默认仅输出被修改的字段内容,导致其他内容未被保留; - 第一条命令的语法错误:
then块中返回的是单个修改后的items元素,而非完整的group对象,破坏了YAML结构。
正确命令写法
写法一:直接定位修改(最简洁)
使用-i参数直接修改原文件,保留所有其他内容:
yq e '.spec.groups[] | select(.name == "deep_learning") | .items[] | select(.name == "triton_release_version") | .default = "new_release_version"' config.yaml -i
写法二:if条件的正确使用(适配复杂分支)
通过嵌套|=操作符确保每个对象完整更新,避免结构破坏:
yq e ' .spec.groups[] |= ( if .name == "deep_learning" then .items[] |= ( if .name == "triton_release_version" then .default = "new_release_version" else . end ) else . end ) ' config.yaml
执行上述任一命令后,triton_release_version的default值会被更新为new_release_version,YAML文件的其他内容将完整保留。
内容的提问来源于stack exchange,提问作者Vini
相关产品推荐
相关产品推荐

