1

我需要从 YAML 中删除一个空映射,使用YQ
有时这个映射可能有值,有时它会显示为空。

我的 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"

任何人都可以帮助我吗?

4

2 回答 2

1

迈克法拉/yq

对于通用方法,您可以使用命令

yq e 'del(.. | select(tag == "!!map" and length == 0))'

删除输入中的所有空对象。

如果您想对空数组执行相同操作,请更改!!map为。!!seq


基斯柳克/yq

删除空对象:yq -y 'del(.. | select(objects and length == 0))'

删除空数组:yq -y 'del(.. | select(arrays and length == 0))'

删除空对象、数组和字符串:yq -y 'del(.. | select(length == 0))'

于 2021-07-07T18:18:37.967 回答
1

annotations您可以在其长度为 0 时删除地图。使用mikefarah/yq,可以按如下方式完成(在 yq 版本 4.9.6 上验证)

yq e 'del(.metadata.annotations | select(length==0))' yaml
于 2021-07-06T05:46:05.727 回答