通过 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"
]
]
]
]

问题。例如,如何通过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等...?

您可以使用此 jq 脚本:

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

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

使用这个。

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"

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

相关内容

最新更新