awcli查询选项用于多个filterexpression式

鉴于aws ec2 describe instances的输出,我试图显示没有Platform值的对象,并有一个VpcId值。 到目前为止,我已经想出了这个:

 aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" --query 'Reservations[*].Instances[?Platform==`null` && ?VpcId!=`null`]' 

但它错误与:

 Bad value for --query Reservations[*].Instances[?Platform==`null` && ?VpcId!=`null`]: Bad jmespath expression: Unknown token ?: Reservations[*].Instances[?Platform==`null` && ?VpcId!=`null`] 

我一直在浏览http://jmespath.org/ ,并没有看到如何执行多个filterexpression式。

 aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" --query 'Reservations[*].Instances[?Platform==`null`]' 

 aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" --query 'Reservations[*].Instances[?VpcId!=`null`]' 

工作,但我试图一次得到这两个查询。

II能够解决我的逻辑问题(filterdescribe-instances的VPC中,但不是 Windows的实例)在这个问题的帮助下: https : //stackoverflow.com/questions/26789915/aws-ec2- cli-jq-exclude-results 。

我的结果查询(其中我正在寻找PrivateIPAddress )是:

 aws --output json ec2 describe-instances \ --filters "Name=instance-state-name,Values=running" |\ jq '.Reservations[].Instances | \ map(select(.VpcId != null)) | map(select(.Platform != "windows") | .PrivateIpAddress)' 

然而,我问的关于filter的实际问题仍然没有得到答复,所以我将把这个问题留给希望吸引这个问题的答案。

我把你的命令,并删除了1个字符 – 第二? 标记。 我添加了选项来将输出格式化为文本。 我也意识到,awscli可能已经改变,以支持多个查询,因为你原来的发布,所以你会想确保你达到最新版本。 这个查询适用于我: aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" --query 'Reservations[*].Instances[?Platform== null && VpcId!= null ]' --output text