我有一组通过AWS ec describe-instances解析的aws实例。我希望修剪掉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的答案-但查询开关会产生相同的结果。
发布于 2017-01-04 05:46:05
Jeff Marcado在评论中的回答将被接受,如果他把它写成一个完整的答案。同时,由于我在尝试让JQ来做这件事时遇到了困难,我尝试了AWS的--query语法来实现这一点。
它可能会更好一些,因为它只捕获以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}'https://stackoverflow.com/questions/41452437
复制相似问题