【问题标题】:Get third element of JSON document via JQ and BASH/SHELL通过 JQ 和 BASH/SHELL 获取 JSON 文档的第三个元素
【发布时间】:2019-09-30 13:27:40
【问题描述】:

我在 AWS 中有一些实例。我想通过特殊标签获取这些应用程序。

我的AWS CLI 命令,通过标签IAMOWNER

aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" "Name=tag:Owner,Values=IAMOWNER" --query "Reservations[*].Instances[*].[InstanceId,PrivateIpAddress,Tags[?Key=='Name'].Value[]]" --region us-west-2

此命令的输出:

[
    [
        [
            "i-d21eei21e912e0e91",
            "192.168.1.203",
            [
                "mycentralapplication-DEV-10"
            ]
        ]
    ],
    [
        [
            "i-ddaswed1e12415155",
            "192.168.1.210",
            [
                "mycentralapplication-DEV-103"
            ]
        ]
    ],
    [
        [
            "i-dass1241211agh354",
            "192.168.1.202",
            [
                "myindexapplication-DEV-53"
            ]
        ]
    ],
    [
        [
            "i-2143214251assaa11",
            "192.168.1.211",
            [
                "myserviceapplication-DEV-52"
            ]
        ]
    ],
    [
        [
            "i-d2112421521assas1",
            "192.168.1.207",
            [
                "mycentralapplication-DEV-10"
            ]
        ]
    ],
    [
        [
            "i-sadas11112424111a",
            "192.168.1.196",
            [
                "myapplication-DEV-106"
            ]
        ]
    ]
]

问题。如何通过bashshell 中的jq 库获取mycentralapplication 的元素? 例如,我必须在输出中只接收mycentralapplication

[
    [
        [
            "i-d21eei21e912e0e91",
            "192.168.1.203",
            [
                "mycentralapplication-DEV-10"
            ]
        ]
    ],
    [
        [
            "i-ddaswed1e12415155",
            "192.168.1.210",
            [
                "mycentralapplication-DEV-103"
            ]
        ]
    ],
    [
        [
            "i-d2112421521assas1",
            "192.168.1.207",
            [
                "mycentralapplication-DEV-10"
            ]
        ]
    ]
]

我该怎么做?

aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" "Name=tag:Owner,Values=IAMOWNER" --query "Reservations[*].Instances[*].[InstanceId,PrivateIpAddress,Tags[?Key=='Name'].Value[]]" --region us-west-2 | jq -r "mycentralapplication"

在这种情况下,我返回错误。问题是,是否可以通过 jq 解决此任务?或者我必须使用grep等...?

【问题讨论】:

  • 所以您的意思是“获取叶子与 x 匹配的元素”,而不是问题标题所说的?
  • 我想从实例列表中接收名称为 mycentralapplication 的所有实例参数,我已收到 @tripleee
  • edit 澄清一下,如果标题不能真正反映您想要的内容,可能会更改标题。您的评论似乎是在重复而不是澄清您已经说过的话。
  • 而且,您是否有理由不首先在过滤器表达式中包含您的条件?

标签: bash amazon-web-services shell jq aws-cli


【解决方案1】:

你可以使用这个 jq 脚本:

aws ... | jq 'map(select(.[][][]?|contains("mycentralapplication")))'

这会选择包含字符串mycentralapplication的所有嵌套数组元素

【讨论】:

    【解决方案2】:

    使用这个。

    aws ec2 describe-instances --filters "Name=tag:Name,Values=mycentralapplication"   "Name=instance-state-name,Values=running"   |  jq -r   ".Reservations[] | .Instances[] | .NetworkInterfaces[] | .PrivateIpAddresses[] | .PrivateIpAddress "
    

    看看

    的完整输出

    aws ec2 describe-instances --filters "Name=tag:Name,Values=mycentralapplication"

    你会看到我是如何拉取价值观的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-24
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多