2017-04-21 85 views
1

如何過濾以下結果,以IP開頭的結果爲10?*返回?如何過濾來自AWS CLI命令的結果

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 
     } 
    ], 

回答

3

選項1)通過過濾器

使用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}' 

選項2)通過查詢

使用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}" 

進一步閱讀

+0

這正是我想要的......謝謝!我錯過了'。'分隔符路徑到嵌套的對象值。非常感謝! :) – ISZ