我有一组AWS实例,我正在通过aws ec describe-instances进行解析。我正在寻找修剪所有IP不以'10 .10'开头的记录。
aws ec2 describe-instances --no-paginate --filter "Name=instance-state-name,Values=running" --query 'Reservations[].Instances[].{Private:PrivateIpAddress,PublicDNS:PublicDnsName,PublicIP:PublicIpAddress}' | jq '.[] | select( .Private | contains("10.10"))'
这让我与我想要的完全相反。似乎合乎逻辑的是我应该能够以某种方式否定包含 - 但我无法从文档中收集它,也不能通过实验来收集它。我的jq熟练程度中等,所以也许我在这里使用了错误的操作符或函数。
虽然我想回答这个特定的jq问题 - 我会接受一个利用JMESPath通过--query开关产生相同结果的答案。
答案 0 :(得分:0)
它可能会好一些,因为它只捕获以10.10开头的对象,而上面的jq将捕获包含10.10的任何对象,所以像10.100这样的东西。或110.100等...将通过。这假设在jq中没有与“starts_with”类似的运算符。可能有。无论如何,我把它放在这里是因为它适用于我的最终目标,并且可能在某些时候对其他人有所帮助。
aws ec2 describe-instances \
--no-paginate --filter "Name=instance-state-name,Values=running" \
--query 'Reservations[].Instances[?starts_with(PrivateIpAddress, `10.10.`) == `false`]' |
jq '.[] | .[] | {PrivateIpAddress, PublicIpAddress, PublicDnsName}'