我有这个YAML文件:
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来修改它,以得到这样的结果:
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的值。
通过使用下面的公式,我得到了一个类似于我想要的结果,但是上下文已经被更改,并且只返回更新的段。
yq '.developers.* | .softwares[].*.license-owner = (. | key)' test.yml生产:
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知道怎么得到预期的结果吗?
发布于 2022-09-30 01:53:12
使用|=进行更新,同时保持上下文:
yq '.developers[] |= .softwares[][].license-owner = key' test.yamldevelopers:
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,因为它包含“特殊字符”):
.developers |= with_entries(.value.softwares[][]."license-owner" = .key)https://stackoverflow.com/questions/73901440
复制相似问题