0

我有以下输出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

但无论我尝试什么,我都无法获得正确的语法,如何实现?

4

1 回答 1

1

你是如此接近,但不是完全正确的过滤器。您需要在select此处使用表达式来匹配与您的字符串条件匹配的对象并从中过滤掉值。

jq '.Vpcs[] | select( .Tags[].Value| contains("Product-Production")) | .VpcId'

如果你破坏过滤器,

  1. 该部分.Vpcs[]列出了我们应用条件的数组中的所有元素。
  2. 我们过滤.Value包含您需要的字符串的对象。因此,在第一个管道输出结束时,您从数组中的元素列表中获取实际元素,与定义的条件匹配。
  3. .VpcId从返回的对象中,您只需使用最后一个管道打印出。

如果您以前没有使用过 jqplay.org,您应该尝试一下,让您的过滤器生效并在线解决。

于 2018-08-06T08:42:19.433 回答