如何过滤以下内容,以便只返回以10. *开头的IP结果?
aws ec2 describe-instances --filters "Name=tag-value,Values=mytagavalue" --query 'Reservations[*].Instances[*].{InstanceId:InstanceId,PrivateDnsName:PrivateDnsName,State:State.Name, IP:NetworkInterfaces[0].PrivateIpAddress}'
[
[
{
"InstanceId": "i-12345bnmsdfod",
"PrivateDnsName": "ip-10-34-24-4.my.there.com",
"State": "running",
"IP": "10.10.10.4"
}
],
[
{
"InstanceId": "i-12345bnmsdfop",
"PrivateDnsName": "",
"State": "terminated",
"IP": null
}
],
答案 0 :(得分:11)
使用network-interface.addresses.private-ip-address
过滤器选择仅匹配" 10。*"的值,这些值将匹配以" 10开始的地址。"。
--filters "Name=network-interface.addresses.private-ip-address,Values=10.*"
只需在不同的过滤器之间加一个空格即可分隔它们。
aws ec2 describe-instances --filters "Name=tag-value,Values=mytagavalue" "Name=network-interface.addresses.private-ip-address,Values=10.*" --query 'Reservations[*].Instances[*].{InstanceId:InstanceId,PrivateDnsName:PrivateDnsName,State:State.Name, IP:NetworkInterfaces[0].PrivateIpAddress}'
使用JMESPath starts_with()
函数执行" 10的部分字符串比较。"针对每个网络接口的私有IP地址。
首先,选择所有实例:
Reservations[].Instances[]
然后通过管道过滤仅包含网络接口的实例,这些接口的私有IP地址以" 10开头。":
| [? NetworkInterfaces [? starts_with(PrivateIpAddress, '10.')]]
然后像以前一样选择字段。这没有改变。 (请注意,您可能希望选择所有网络接口而不是第一个。)
.{InstanceId:InstanceId,PrivateDnsName:PrivateDnsName,State:State.Name, IP:NetworkInterfaces[0].PrivateIpAddress}"
aws ec2 describe-instances --filters "Name=tag-value,Values=mytagavalue" --query "Reservations[].Instances[] | [? NetworkInterfaces [? starts_with(PrivateIpAddress, '10.')]].{InstanceId:InstanceId,PrivateDnsName:PrivateDnsName,State:State.Name, IP:NetworkInterfaces[0].PrivateIpAddress}"