首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用yq重新插入数组

如何用yq重新插入数组
EN

Stack Overflow用户
提问于 2022-06-29 10:43:07
回答 1查看 94关注 0票数 0

考虑下面的hello.yaml

代码语言:javascript
复制
foos:
  - foo: foo1
    bar: hello
  - foo: foo2
    bar: world

如果我想更新barfoo = "foo1",可以调用以下命令:

代码语言:javascript
复制
yq '( .foos[] | select(.foo == "foo1") | .bar) |= "goodbye cruel"' hello.yaml

正确的产出是:

代码语言:javascript
复制
foos:
  - foo: foo1
    bar: goodbye cruel
  - foo: foo2
    bar: world

但是,如果我不知道我有一个匹配的项,我想插入适当的条目,例如yq '( .foos[] | select(.foo == "foo3") | .bar) ...之类的输出

代码语言:javascript
复制
foos:
  - foo: foo1
    bar: hello
  - foo: foo2
    bar: world
  - foo: foo3
    bar: goodbye cruel

yq中是否有一种“重新插入”数组的方法,或者我是否必须先评估键是否存在,然后执行两个命令中的一个来插入或更新?

非常感谢

EN

回答 1

Stack Overflow用户

发布于 2022-08-04 06:13:18

就像伊尼安说的那样,(目前)没有重新插入的操作。我就是这样做的--不知道有没有更好的办法?

代码语言:javascript
复制
yq '
  with(.foos ;
    select( all_c(.foo != "foo3")) | . += {"foo": "foo3"}
  ) |
  (.foos[] | select(.foo == "foo3") | .bar) = "cool"
' hello.yaml

解释:

  1. with块中,匹配没有foo: foo3的数组,并添加它。
  2. 下一步,查找带foo: foo3的所有元素并更新它们。

免责声明:我写了yq

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72800033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档