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

如何用yq通过正则实现YAML反向匹配并移除指定对象?

使用yq实现YAML键的反向匹配筛选需求

完全可以用yq实现这个需求,以下是针对mikefarah/yq v4+(目前主流的yq版本)的具体解决方案:

核心命令

yq eval 'del(keys | select(test("^(?!.*non-production).*production$")) as $key | .[$key])' input.yaml

命令解释

这个命令通过正则表达式精准匹配需要删除的键,并执行删除操作:

  • del(...):yq的删除函数,用于移除指定节点
  • keys | select(test("^(?!.*non-production).*production$")):筛选符合条件的键名,正则表达式的逻辑是:
    • ^(?!.*non-production):负向预查,确保键名中不包含non-production子串
    • .*production$:匹配以production结尾的键名
  • as $key | .[$key]:将筛选出的键对应的值节点传递给del完成删除

效果验证

针对你提供的输入YAML:

....
....

validate-common-non-production:
  stage: validate-common-non-production

deploy-common-non-production:
  stage: deploy-common-non-production

validate-common-production:
  stage: validate-common-production

deploy-common-production:
  stage: deploy-common-production

...
...

执行命令后,输出会保留所有不以production结尾的节点,以及包含non-production的节点,最终结果和你期望的一致:

....
....

validate-common-non-production:
  stage: validate-common-non-production

deploy-common-non-production:
  stage: deploy-common-non-production
...
...

注意事项

如果你使用的是旧版本的yq(比如v3或kislyuk/yq),语法会有所不同,建议升级到mikefarah/yq v4+以获得更完善的正则支持和功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 05:55:04