[英]Extracting output of aws command and assign it to a variable in bash using jq
按照 aws 命令输出以下 json,我想从中提取具有字符串“vm-managed-itg* 值(输出中的最后两个条目)的资源
$aws resourcegroupstaggingapi get-resources --resource-type-filters cloudwatch:alarm --profile acc | jq '.ResourceTagMappingList[] | 选择(包含({标签:[{Key:“vm:cost:accountenv”}]})|不)| 选择(包含({标签:[{值:“itg”}]})|不)'
{
"ResourceARN": "arn:aws:cloudwatch:us-east-1:xxxx:alarm:vm-managed-uat-test",
"Tags": []
}
{
"ResourceARN": "arn:aws:cloudwatch:us-east-1:xxxx:alarm:vm-managed-stg-test",
"Tags": []
}
{
"ResourceARN": "arn:aws:cloudwatch:us-east-1:xxxx:alarm:vm-managed-uat-test3",
"Tags": []
}
{
"ResourceARN": "arn:aws:cloudwatch:us-east-1:xxxx:alarm:vm-managed-stg-test1",
"Tags": []
}
{
"ResourceARN": "arn:aws:cloudwatch:us-east-1:xxxx:alarm:vm-managed-itg-test1",
"Tags": []
}
{
"ResourceARN": "arn:aws:cloudwatch:us-east-1:xxxx:alarm:vm-managed-itg-test",
"Tags": []
}
我尝试添加 jq -r '.[].ResourceARN' 但它没有用,而是抛出了这个错误
~$ aws resourcegroupstaggingapi get-resources --resource-type-filters cloudwatch:alarm --profile per-acc --output json | jq '.ResourceTagMappingList[] | select(contains({Tags: [{Key: "vm:cost:accountenv"} ]}) | not) | select(contains({Tags: [{Value: "itg"} ]}) | not)' | jq -r '.[].ResourceARN'
jq: error (at <stdin>:4): Cannot index string with string "ResourceARN"
jq: error (at <stdin>:8): Cannot index string with string "ResourceARN"
jq: error (at <stdin>:12): Cannot index string with string "ResourceARN"
jq: error (at <stdin>:16): Cannot index string with string "ResourceARN"
jq: error (at <stdin>:20): Cannot index string with string "ResourceARN"
jq: error (at <stdin>:24): Cannot index string with string "ResourceARN"
使用select
仅在匹配条件时返回实体。 Substring 匹配项可以用contains
进行测试:
select(.ResourceARN|contains("vm-managed-itg"))
Output:
{
"ResourceARN": "arn:aws:cloudwatch:us-east-1:xxxx:alarm:vm-managed-itg-test1",
"Tags": []
}
{
"ResourceARN": "arn:aws:cloudwatch:us-east-1:xxxx:alarm:vm-managed-itg-test",
"Tags": []
}
如果您只对ResourceARN
的值感兴趣,没有标签和周围的对象,那么:
.ResourceARN | select(contains("vm-managed-itg"))
jq 将过滤器应用于其输入中的每个 JSON 实体(这是一个 stream 的对象)。
Output:
"arn:aws:cloudwatch:us-east-1:xxxx:alarm:vm-managed-itg-test1"
"arn:aws:cloudwatch:us-east-1:xxxx:alarm:vm-managed-itg-test"
( jq -r
对于原始 output 不带引号)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.