0

我有一个像这样的 YAML 文件

---
apps_membership:
  children:
    apps_prometheus:
      children:                                                                                                       
        group_1:
        group_2:
    apps_logstash:
      children:
        group_3:
        group_4:
    apps_alertmanager:
      children:
        group_1:
        group_2:

我在寻找 vm 时尝试获取组,例如,我正在寻找我想要获取的group_1

apps_prometheus
apps_alertmanager

我正在尝试将kislyuk/yq和 jq 与 map / key / contains结合使用

----- 使用路径命令测试

如果我使用命令 yq -r '.apps_membership.children | paths' ,我会得到这个结果:

[
  "apps_prometheus"
]
[
  "apps_prometheus",
  "children"
]
[
  "apps_logstash"
]
[
  "apps_logstash",
  "children"
]
[
  "apps_alertmanager"
]
[
  "apps_alertmanager",
  "children"
]

如果我用

    apps_alertmanager:
      children:
        group_1: ""
        group_2: ""

我得到了想要的输出:

[
  "apps_alertmanager"
]
[
  "apps_alertmanager",
  "children"
]
[
  "apps_alertmanager",
  "children",
  "group_1"
]
[
  "apps_alertmanager",
  "children",
  "group_2"
]

我如何使用命令路径来获取空值?

4

1 回答 1

0

kislyuk/yq中,您可以使用paths可用的函数jq来过滤键名

yq -r '.apps_membership.children | paths | select(.[-1] == "group_1")[0]'
于 2021-04-20T10:11:51.300 回答