yq:按字母顺序将新值添加到列表中

coo*_*ndy 2 yaml yq

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

foo:
 - a
 - c
bar:
 - foo: bar
   foo2: bar2
Run Code Online (Sandbox Code Playgroud)

我正在尝试按字母顺序向 中添加新值 ( b) foo。我可以使用 添加值+=,但它不会按字母顺序排列

$ yq '.foo += "b"' foo.yaml

foo:
  - a
  - c
  - b
bar:
  - foo: bar
    foo2: bar2
Run Code Online (Sandbox Code Playgroud)

如果我使用+我可以使用sort,但我只能得到原始值。例如:

$ yq '.foo += "b"' foo.yaml

foo:
  - a
  - c
  - b
bar:
  - foo: bar
    foo2: bar2
Run Code Online (Sandbox Code Playgroud)

我尝试将其设置为 bash 变量,然后将其与 一起使用=,但它显示为多行文本

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

- a
- b
- c
Run Code Online (Sandbox Code Playgroud)

有没有更简单的方法可以按foo字母顺序插入新值,同时保持 yaml 的其余部分完好无损?

mik*_*e.f 5

您获得原始值的原因是您已经告诉yq要遍历“foo”。相反尝试:

yq '.foo = (.foo + "b" | sort)' file.yaml 
Run Code Online (Sandbox Code Playgroud)

产量:

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

Run Code Online (Sandbox Code Playgroud)

解释:

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

免责声明:我写的是yq