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

如何用mikefarah/yq删除YAML中含指定属性匹配子项的区块

问题出在哪

  • 你之前的del(.. | select(. == "Experimental"))语句,匹配到的是值为Experimental的tags数组元素本身,所以执行删除操作时只会移除这个标签,不会触及它所属的上层API方法块。
  • 第二个with_entries的写法层级匹配错误:paths的下一级是接口路径(比如/uuid/{uuid}),再下一级才是HTTP方法定义(比如delete/get),你要删除的是符合条件的HTTP方法块,不是直接删除路径条目,路径下如果所有方法都被删完才需要清理空路径。

正确实现命令

以下命令适配目前主流的mikefarah yq v4及以上版本:

yq eval '
# 第一步:删除所有tags包含Experimental的HTTP方法块
.paths[] |= with_entries(del(select(.value.tags[] == "Experimental")))
# 第二步:清理删除方法后变成空的路径节点
| .paths |= with_entries(del(select(.value | length == 0)))
' openapi.yaml

如果需要直接修改原文件,加上-i参数即可:

yq eval -i '
.paths[] |= with_entries(del(select(.value.tags[] == "Experimental")))
| .paths |= with_entries(del(select(.value | length == 0)))
' openapi.yaml

命令逻辑说明

  • 第一行逻辑:遍历每个接口路径下的所有HTTP方法条目,对每个方法判断它的tags数组中是否包含Experimental,匹配到就删除整个方法定义块。
  • 第二行逻辑:做冗余结构清理,如果某个路径下的所有HTTP方法都被删除,就把这个空的路径节点也一并移除,保证输出的YAML结构整洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:15:04