微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 yq

如何解决使用 yq

给定 master.yml ...

containers:
  - name: project-a
    items:
      - CCC
  - name: project-z
    items:
      - CCC
      - DDD

... 和一个 update.yml ...

- name: project-z
  items:
    - CCC
    - EEE

...我想将它合并到正确的条目中。这会给:

containers:
  - name: project-a
    items:
      - CCC
  - name: project-z
    items:
      - CCC
      - DDD
      - EEE

以下 yq 4 如果更新是针对 project-a

yq ea 'select(fileIndex==0) * {"containers":select(fileIndex==1)}' master.yml update.yml

但是,使用提供的 project-z 更新,它错误地替换了第一个数组条目(最终得到两个 project-z)。

解决方法

深入研究手册后,我有这个:

yq ea 'select(fi==1).0.name as $p | (select(fi==0).containers.[] | select(.name==$p)) = (select(fi==1) | .0 | . headComment="AUTO-UPDATED") |  select(fi==0)'  master.yml update.yml

通过首先搜索匹配project-z的{​​{1}}然后完全替换内容来替换而不是合并name

我理解根本原因是数据被格式化为列表,它应该是一个字典update.yml 是唯一的)。

这将微不足道地合并,将来也会更好!

name

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。