考虑下面的hello.yaml
foos:
- foo: foo1
bar: hello
- foo: foo2
bar: world如果我想更新bar值foo = "foo1",可以调用以下命令:
yq '( .foos[] | select(.foo == "foo1") | .bar) |= "goodbye cruel"' hello.yaml正确的产出是:
foos:
- foo: foo1
bar: goodbye cruel
- foo: foo2
bar: world但是,如果我不知道我有一个匹配的项,我想插入适当的条目,例如yq '( .foos[] | select(.foo == "foo3") | .bar) ...之类的输出
foos:
- foo: foo1
bar: hello
- foo: foo2
bar: world
- foo: foo3
bar: goodbye cruel在yq中是否有一种“重新插入”数组的方法,或者我是否必须先评估键是否存在,然后执行两个命令中的一个来插入或更新?
非常感谢
发布于 2022-08-04 06:13:18
就像伊尼安说的那样,(目前)没有重新插入的操作。我就是这样做的--不知道有没有更好的办法?
yq '
with(.foos ;
select( all_c(.foo != "foo3")) | . += {"foo": "foo3"}
) |
(.foos[] | select(.foo == "foo3") | .bar) = "cool"
' hello.yaml解释:
with块中,匹配没有foo: foo3的数组,并添加它。免责声明:我写了yq
https://stackoverflow.com/questions/72800033
复制相似问题