You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用yq替换YAML中指定参数的values数组并保留文件其他内容?

用yq替换YAML指定数组并保留完整文件内容

你需要修改YAML文件中parameters块里name为environment的values数组,同时保留文件其余内容。原命令的问题在于使用管道符后只输出了parameters数组的元素,丢失了顶级字段和其他内容。

正确的yq命令(适用于mikefarah/yq v4+)

执行以下命令即可完成替换,同时保留整个YAML结构:

yq '.parameters[] | select(.name == "environment") |= .values = ["foo"]' infile.yml

命令说明

  • .parameters[]:遍历parameters数组中的每个元素
  • select(.name == "environment"):筛选出name字段为environment的元素
  • |= .values = ["foo"]:对筛选出的元素进行修改,将其values设置为仅包含foo的数组
  • 整个命令会输出完整的YAML文档,而非仅修改后的部分

执行后结果

name: mything

parameters:
  - name: environment
    type: string
    values:
      - foo
  - name: destroy
    type: boolean
    default: false
  - name: validate
    type: boolean
    default: true

variables:
  - group: storytest
  - name: version
    value: "1.0.0"

备选方案(使用sed,仅适用于简单场景)

如果YAML结构固定,也可以用sed进行替换,但局限性较大(比如values的缩进、元素位置变化会失效):

sed -i '/name: environment/,/values:/{/values:/,/^  - name:/s/- .*/- foo/}' infile.yml

内容的提问来源于stack exchange,提问作者timcrall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 05:33:27