You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

YQ 4.2.x+按指定列表替换YAML列表对应子字段targetRevision值

yq 4.2+ 定向替换YAML字段实现方案

需求说明

使用4.2.x及以上版本的yq工具处理YAML配置文件:

  • 待匹配名称列表:replace_list=[argocd,argocd-projects]
  • 目标替换值:replace_to_value=v1.0.0
  • 替换规则:定位server.additionalApplications数组中,name字段属于待匹配列表的元素,将其对应的source.targetRevision字段值统一替换为v1.0.0,不在匹配列表内的元素该字段值保持不变。

可用命令

基础版(固定匹配规则)

执行以下命令会直接在终端输出修改后的YAML内容,验证输出符合预期后可加-i参数原地修改原文件:

yq '
.server.additionalApplications[] |= (
  select(.name == ("argocd", "argocd-projects"))
  | .source.targetRevision = "v1.0.0"
)' argocd/argocd-install/values-override.yaml

复用版(参数抽离为变量)

如果需要频繁调整匹配规则、替换值或目标文件路径,可以使用变量传参的写法:

# 可根据实际需求修改以下变量值
REPLACE_LIST=("argocd" "argocd-projects")
REPLACE_TO_VALUE="v1.0.0"
TARGET_FILE="argocd/argocd-install/values-override.yaml"

# 执行替换:去掉-i参数则仅打印结果不修改原文件,加-i则原地写入文件
yq -i '
.server.additionalApplications[] |= (
  select([$replace_list] | contains([.name]))
  | .source.targetRevision = $replace_to
)' --arg replace_to "$REPLACE_TO_VALUE" --arg replace_list "$(IFS=,; echo "${REPLACE_LIST[*]}")" "$TARGET_FILE"

逻辑说明

  • 原有读取命令.server.additionalApplications.[] | (.source.targetRevision)仅实现字段取值,未结合更新运算符|=,无法保留原YAML结构完成定向修改
  • |=是yq的更新运算符,会遍历指定路径下的所有元素,对符合条件的元素执行修改后回写到原结构,不符合条件的元素保持原有内容不变
  • select()负责条件过滤,仅对name命中匹配列表的元素执行后续字段赋值操作
  • 执行命令时先不要加-i参数,确认终端输出内容完全符合预期后,再加-i执行原地文件修改,避免原文件被误改。

内容的提问来源于stack exchange,提问作者SweedInsight

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 14:01:12