如何解决使用 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 举报,一经查实,本站将立刻删除。