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

如何用yq向YAML的foo列表按字母序添加值并保留原结构?

问题:向YAML列表按字母顺序插入新值并保留完整结构

现有foo.yaml文件内容如下:

foo:
 - a
 - c
bar:
 - foo: bar
   foo2: bar2

需要向foo列表中按字母顺序添加新值b,但尝试的几种方法都存在问题:

  • 使用+=添加值,但不会自动排序:
$ yq '.foo += "b"' foo.yaml

foo:
  - a
  - c
  - b
bar:
  - foo: bar
    foo2: bar2
  • 使用+结合sort()只能得到排序后的列表,丢失原文件的其他结构:
$ yq '.foo + "b" | sort()' foo.yaml

- a
- b
- c
  • 存入bash变量后再赋值,会将列表转为多行文本格式:
$ variable=$(yq '.foo + "b" | sort()' foo.yaml)

$ yq ".foo = \"$variable\"" foo.yaml

foo: |-
  - a
  - b
  - c
bar:
  - foo: bar
    foo2: bar2

有没有更简便的方法,能向foo列表按字母顺序插入新值,同时保留YAML文件的其余结构?


解决方案

直接通过yq一次性完成合并、排序和赋值操作,即可保留完整的YAML结构:

yq '.foo = (.foo + ["b"] | sort())' foo.yaml

执行后输出结果:

foo:
  - a
  - b
  - c
bar:
  - foo: bar
    foo2: bar2

关键说明:

  1. (.foo + ["b"]):将原foo列表与包含b的新列表合并,得到临时列表[a, c, b]
  2. | sort():对合并后的临时列表按字母顺序排序
  3. .foo = ...:将排序后的结果重新赋值给foo字段,同时保留文件中其他字段的结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 12:45:44