通过JQ和BASH / SHELL获取JSON文档的第三个元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过JQ和BASH / SHELL获取JSON文档的第三个元素相关的知识,希望对你有一定的参考价值。

我在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"
            ]
        ]
    ]
]

问题。如何通过mycentralapplicationjq中的bash库获取shell例如的元素?例如,我只需要在输出中接收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等...?

答案

您可以使用此jq脚本:

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

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

以上是关于通过JQ和BASH / SHELL获取JSON文档的第三个元素的主要内容,如果未能解决你的问题,请参考以下文章

Linux 命令详解Shell 解析 json命令jq详解

jq生成的Shell命令无法正确运行

如何删除 jq 输出中的双引号以在 bash 中解析 json 文件?

如何删除 jq 输出中的双引号以在 bash 中解析 json 文件?

通过按键过滤数组,使用 jq 展平 JSON 文档

使用 jq 和 bash 为数组中的每个对象运行命令