你好,目前我试图找到一个工具(我很确定yq不魔术对我来说)从一个yaml文件中删除一些内容。我的文件如下所示:
paths:
/entity/{id}:
get:
tags: a
summary: b
...
所以这是一个典型的openapi规范。我想添加一个神奇的属性,例如'env: prod',这样一些端点看起来如下:
paths:
/entity/{id}:
get:
env: prod
tags: a
summary: b
...
是否有一个解决方案来删除所有端点,其中包含env: prod?
我也可以自由地改变概念。如果有一些变换,如果有的话,我会很高兴的。
使用kislyuk/yq:
yq -y '.[][][] |= ({env: "prod"} + .)'
使用mikefarah/yq:
yq '.[][][] |= ({"env": "prod"} + .)'
生产:
paths:
/entity/{id}:
get:
env: prod
tags: a
summary: b
这将env: prod
添加到每个三层深度的对象。如果您希望标准更复杂,则必须相应地调整.[][][]
。
yq 'del(.. | select(.env == "prod"))' file.yaml
解释:您想要删除所有将子'env'属性设置为'prod'的节点。
..
递归匹配所有节点select(.env == "prod")
选择env
属性等于" product ">del(.. | select(.env == "prod")
删除这些节点:)
免责声明:我写了mikefarah/yq