【问题标题】:yq: Add new value to list in alphabetical orderyq:按字母顺序将新值添加到列表中
【发布时间】:2022-07-29 12:54:07
【问题描述】:

我有一个简单的 yaml 文件,名为 foo.yaml

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

我正在尝试按字母顺序将新值 (b) 添加到 foo。我可以用+= 添加值,但它不会被字母化

$ 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 的其余部分完好无损?

【问题讨论】:

    标签: yaml yq


    【解决方案1】:

    您获得原始值的原因是您告诉yq 遍历“foo”。而是尝试:

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

    解释:

    • 您需要更新 'foo' 中的条目
    • 然后,在括号中设置新值。通常你可以使用 +=,但是因为你想要排序,所以我使用了 '='

    免责声明:我写了 yq

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多