使用yq4将YAML指定key下内容移动到目标路径的实现方法
正确命令(一步完成)
直接执行以下命令即可原地修改文件,完成字段迁移+删除旧字段的操作:
yq eval --inplace '.vehicles.car *= .car_facts | del(.car_facts)' 你的yaml文件路径.yaml
命令说明
*=是yq4中专门用于深度合并两个映射的运算符,支持多层嵌套字段合并,符合你的使用场景,无字段冲突的情况下不会有覆盖问题- 管道符
|用来串联多步操作,del(.car_facts)直接删除原有的car_facts根字段
如果需要分两步操作,也可以分别执行:
- 先把
car_facts的内容合并到vehicles.car下:
yq eval --inplace '.vehicles.car *= .car_facts' 你的yaml文件路径.yaml
- 再删除旧的
car_facts字段:
yq eval --inplace 'del(.car_facts)' 你的yaml文件路径.yaml
报错原因说明
你之前执行报错是两个原因导致:
- 赋值方向写反,应该是目标字段
vehicles.car合并源字段car_facts的内容,你写反了源和目标 +=运算符仅支持字符串、数组的追加操作,不支持映射(map)类型的合并,所以会提示不支持map相加的错误。
内容的提问来源于stack exchange,提问作者James Cockbain
相关产品推荐
相关产品推荐

