[{
"Availab]ilityZone": "ap-east-1a"
"Description": "AWS_FOO"
"Groups": [
{
"GroupName": "AWS_FOO"
"GroupId": "sg-AWS_FOO"
}
{
"GroupName": "AWS_FOO"
"GroupId": "sg-AWS_FOO"
}
]
}
{
"Availab]ilityZone": "ap-east-1a"
"Description": "AWAWS_FOOAWS_FOO"
"Groups": [
{
"GroupName": "AWS_FOO-eAWS_FOOAWS_FOO"
"GroupId": "sAWS_FOO"
}
{
"GroupName": "AWS_FOO"
"GroupId": "AWS_FOO"
}
]
}]
我正在尝试编写一个需要使用 aws cli 来查找值的自动化脚本,
NETWORK_INTERFACE=$(aws ec2 描述网络接口 --filters Name=vpc-id,Values="${VPC_ID}" --output json | jq -r '.NetworkInterfaces[]')
但是,当我 echo $NETWORK_INTERFACEthe 时,输出将缺少所有逗号“,”,使其不是有效的 json 格式,并且无法使用 jq 进行进一步操作
我尝试使用 IFS、sed 但结果不是我预期的
我的预期输出是有效的 json
[{
"Availab]ilityZone": "ap-east-1a",
"Description": "AWS_FOO" ,
"Groups": [
{
"GroupName": "AWS_FOO" ,
"GroupId": "sg-AWS_FOO",
} ,
{
"GroupName": "AWS_FOO" ,
"GroupId": "sg-AWS_FOO",
}
]
},
{
"Availab]ilityZone": "ap-east-1a",
"Description": "AWAWS_FOOAWS_FOO",
"Groups": [
{
"GroupName": "AWS_FOO-eAWS_FOOAWS_FOO",
"GroupId": "sAWS_FOO",
},
{
"GroupName": "AWS_FOO",
"GroupId": "AWS_FOO",
}
]
}]
这应该可以解决问题。
#!/bin/bash
VPC_ID=vpc-05ae0495871281736
NETWORK_INTERFACE=$(aws ec2 describe-network-interfaces --filters Name=vpc-id,Values="${VPC_ID}" --output json | jq -r '[.NetworkInterfaces[] | {AvailabilityZone, Description, Groups}]')
echo $NETWORK_INTERFACE
用您自己的值替换
VPC_ID
。
根据您的示例输出,我已过滤掉字段
AvailabilityZone
、Description
和 Groups
。
脚本的输出只是一行有效的 JSON。您可以通过传递它来美化它
jq .
。
例如:
[
{
"AvailabilityZone": "eu-west-2c",
"Description": "test",
"Groups": [
{
"GroupName": "VNC",
"GroupId": "sg-030848ac470abe56f"
}
]
},
{
"AvailabilityZone": "eu-west-2c",
"Description": "",
"Groups": [
{
"GroupName": "MOSH",
"GroupId": "sg-06dff26a1939d90d7"
},
{
"GroupName": "http(s)",
"GroupId": "sg-048d4d5554f4a7da6"
}
]
}
]