首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >yq -用父节点键分配节点值

yq -用父节点键分配节点值
EN

Stack Overflow用户
提问于 2022-09-29 20:46:46
回答 1查看 99关注 0票数 0

我有这个YAML文件:

代码语言:javascript
复制
developers:
  bob:
    softwares:
      - yq:
          version: "1.2.3"
      - visual-studio-code:
          version: "1.2.3"
  john:
    softwares:
      - xcode:
          version: "1.2.3"
      - jq:
          version: "1.2.3"

我试图用yq来修改它,以得到这样的结果:

代码语言:javascript
复制
developers:
  bob:
    softwares:
      - yq:
          version: "1.2.3"
          license-owner: bob
      - visual-studio-code:
          version: "1.2.3"
          license-owner: bob
  john:
    softwares:
      - xcode:
          version: "1.2.3"
          license-owner: john
      - jq:
          version: "1.2.3"
          license-owner: john

请注意,我想使用第二级键作为license-owner的值。

通过使用下面的公式,我得到了一个类似于我想要的结果,但是上下文已经被更改,并且只返回更新的段。

代码语言:javascript
复制
yq '.developers.* | .softwares[].*.license-owner = (. | key)' test.yml

生产:

代码语言:javascript
复制
softwares:
  - yq:
      version: "1.2.3"
      license-owner: bob
  - visual-studio-code:
      version: "1.2.3"
      license-owner: bob
softwares:
  - xcode:
      version: "1.2.3"
      license-owner: john
  - jq:
      version: "1.2.3"
      license-owner: john

知道怎么得到预期的结果吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-30 01:53:12

使用|=进行更新,同时保持上下文:

代码语言:javascript
复制
yq '.developers[] |= .softwares[][].license-owner = key' test.yaml
代码语言:javascript
复制
developers:
  bob:
    softwares:
      - yq:
          version: "1.2.3"
          license-owner: bob
      - visual-studio-code:
          version: "1.2.3"
          license-owner: bob
  john:
    softwares:
      - xcode:
          version: "1.2.3"
          license-owner: john
      - jq:
          version: "1.2.3"
          license-owner: john

mikefarah/yq版本4.27.2测试

另一个更易读的选择是使用with_entries,然后使用mikefarah/yq和kislyuk/yq (注意,后者还需要引用license-owner,因为它包含“特殊字符”):

代码语言:javascript
复制
.developers |= with_entries(.value.softwares[][]."license-owner" = .key)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73901440

复制
相关文章

相似问题

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