如何使用yq修改对象数组中含指定字符的YAML对象
使用yq实现需求的解决方案
针对你的YAML文件,使用mikefarah/yq v4+(当前主流版本)可以通过以下命令完成原地修改:
yq eval '.animals[] |= (to_entries | map(if .key | contains("a") then .value = {"has_a": true} + .value else . end) | from_entries)' your_file.yaml -i
命令解释
.animals[]:遍历animals数组中的每一项(每项是单个键值对,比如{rabbit: {type: R}})to_entries:将单个键值对转换为标准键值条目格式(比如[{key: "rabbit", value: {type: R}}]),方便后续处理map(...):遍历每个键值条目:- 用
.key | contains("a")判断键名是否包含字符a - 如果符合条件,就把
value替换为{"has_a": true} + .value——这个操作会把has_a: true插入到属性的最开头,同时保留原有属性 - 不符合条件的条目直接保留原样
- 用
from_entries:将处理后的键值条目转换回原来的YAML映射格式-i:参数表示原地修改文件,执行后直接覆盖原文件内容
验证结果
执行命令后,原文件会被修改为你期望的格式:
animals: - rabbit: has_a: true type: R - dog: type: D - cat: has_a: true type: C
内容的提问来源于stack exchange,提问作者mac
相关产品推荐
相关产品推荐

