如何使用 yq 从 YAML 中删除空映射
How to remove an empty map from YAML using yq
我需要使用 YQ
从 YAML 中删除一个空映射
有时这张地图可能有值,有时它会显示为空。
我的 YAML 代码如下所示:
apiVersion: route.openshift.io/v1
kind: Route
metadata:
annotations: {}
creationTimestamp: "2021-03-24T13:16:10Z"
我需要删除 annotations: {}
我想要的输出:
apiVersion: route.openshift.io/v1
kind: Route
metadata:
creationTimestamp: "2021-03-24T13:16:10Z"
有人可以帮助我吗?
当annotations
图的长度为0时,您可以删除它。使用mikefarah/yq,可以如下完成(在yq版本4.9.6上验证)
yq e 'del(.metadata.annotations | select(length==0))' yaml
mikefarah/yq
对于通用方法,您可以使用命令
yq e 'del(.. | select(tag == "!!map" and length == 0))'
删除输入中的所有空对象。
如果您想对空数组执行相同操作,请将 !!map
更改为 !!seq
。
kislyuk/yq
删除空对象:yq -y 'del(.. | select(objects and length == 0))'
删除空数组:yq -y 'del(.. | select(arrays and length == 0))'
删除空对象、数组和字符串:yq -y 'del(.. | select(length == 0))'
我需要使用 YQ
从 YAML 中删除一个空映射
有时这张地图可能有值,有时它会显示为空。
我的 YAML 代码如下所示:
apiVersion: route.openshift.io/v1
kind: Route
metadata:
annotations: {}
creationTimestamp: "2021-03-24T13:16:10Z"
我需要删除 annotations: {}
我想要的输出:
apiVersion: route.openshift.io/v1
kind: Route
metadata:
creationTimestamp: "2021-03-24T13:16:10Z"
有人可以帮助我吗?
当annotations
图的长度为0时,您可以删除它。使用mikefarah/yq,可以如下完成(在yq版本4.9.6上验证)
yq e 'del(.metadata.annotations | select(length==0))' yaml
mikefarah/yq
对于通用方法,您可以使用命令
yq e 'del(.. | select(tag == "!!map" and length == 0))'
删除输入中的所有空对象。
如果您想对空数组执行相同操作,请将 !!map
更改为 !!seq
。
kislyuk/yq
删除空对象:yq -y 'del(.. | select(objects and length == 0))'
删除空数组:yq -y 'del(.. | select(arrays and length == 0))'
删除空对象、数组和字符串:yq -y 'del(.. | select(length == 0))'