我有aws ec2 describe-vpcs
的以下输出:
{
"Vpcs": [
{
"VpcId": "vpc-1f0e197d",
"InstanceTenancy": "default",
"Tags": [
{
"Value": "Product-Production",
"Key": "Name"
}
],
"CidrBlockAssociationSet": [
{
"AssociationId": "vpc-cidr-assoc-f3c5509a",
"CidrBlock": "172.19.0.0/16",
"CidrBlockState": {
"State": "associated"
}
}
],
"State": "available",
"DhcpOptionsId": "dopt-37fd5550",
"CidrBlock": "172.19.0.0/16",
"IsDefault": false
},
{
another vpc...
}
]
}
如果
,我正在使用jq
来捕获“ VpcId”
.Tags[].Value==Product-Production
但是无论我如何尝试,我都无法获得正确的语法,如何实现?
答案 0 :(得分:1)
您太近了,但过滤器并不正确。您需要在此处使用select
表达式来匹配与您的字符串条件匹配的对象,并从中筛选出值。
jq '.Vpcs[] | select( .Tags[].Value| contains("Product-Production")) | .VpcId'
如果您分解过滤条件,
.Vpcs[]
部分列出了我们要对其应用条件的数组中的所有元素。.Value
中包含您在此处需要的字符串的对象。因此,在第一个管道输出的末尾,您可以从数组中的元素列表中获取实际元素,并与定义的条件匹配。.VpcId
和最后一个管道即可。如果您以前从未使用过jqplay.org,则应该尝试一下并使其生效,然后在线进行过滤。