使用yq批量更新YAML中foo所有子元素的key_to_update值
批量更新YAML中所有子元素的指定键值
下面提供两种实用的方法实现你要的批量更新操作:
方法一:使用yq工具(推荐)
yq是专门处理YAML的命令行工具,操作简单高效。假设你的YAML文件名为input.yaml,执行以下命令即可批量更新:
# 预览修改结果(不修改原文件) yq eval '.foo[] |= .key_to_update = "x"' input.yaml # 直接修改原文件 yq eval -i '.foo[] |= .key_to_update = "x"' input.yaml
命令说明:
.foo[]:遍历foo节点下的所有子元素|=:对每个遍历到的元素执行后续修改操作.key_to_update = "x":将当前元素的key_to_update值设为"x"
方法二:使用Python脚本
如果不想额外安装工具,可以用Python脚本实现:
import yaml # 读取YAML文件 with open('input.yaml', 'r', encoding='utf-8') as f: data = yaml.safe_load(f) # 遍历更新所有子元素的key_to_update for item in data['foo'].values(): item['key_to_update'] = 'x' # 写回原文件,保持原有键顺序 with open('input.yaml', 'w', encoding='utf-8') as f: yaml.dump(data, f, sort_keys=False, default_flow_style=False)
脚本说明:
yaml.safe_load:安全读取YAML内容,避免执行恶意代码sort_keys=False:确保写入后的YAML文件保持原有的键顺序default_flow_style=False:以块格式写入YAML,保持可读性
内容的提问来源于stack exchange,提问作者Derek Brown
相关产品推荐
相关产品推荐

