我需要转换此输出
$ aws ec2 describe-instances --instance-ids i-xxxxxxxx | jq -r '.Reservations[].Instances[].Tags[]' | jq -s 'from_entries | del(..|.["aws:autoscaling:groupName"]?)'
{
"Key": "ssh_user",
"Value": "abc"
}
{
"Key": "ssh_port",
"Value": "2200"
}
{
"Key": "aws:autoscaling:groupName",
"Value": "ASG-Api"
}
{
"Key": "Name",
"Value": "SV-V3-API"
}
使用jq进入这个:
{
"ssh_user":"abc",
"ssh_port":"2200",
"Name":"SV-V3-API"
}
请注意,我需要删除此密钥: aws:autoscaling:groupName
答案 0 :(得分:1)
我认为@ peak关于sed
的评论非常重要,可以单独回答。
jq
版本1.4及更低版本无法使用from_entries
原生使用亚马逊的键/值对,因为亚马逊大写字母键而jq
期望使用小写字母键。版本为1.5的jq
团队addressed this。
要将您的EC2实例标记设为key: value
对,而不是{key, value}
条目,请使用:
aws ... | \
sed -e 's/"Key":/"key":/g' -e 's/"Value":/"value":/g' | \
jq '.Reservations[]|.Instances[]|.Tags|from_entries'
答案 1 :(得分:0)
使用jq 1.5:
$ jq -cs 'from_entries | del(.["aws:autoscaling:groupName"])'
使用jq 1.3或1.4:
$ jq -M -c -s 'reduce .[] as $x
([]; . + [{"key" : $x.Key, "value": $x.Value}])
| from_entries
| del(.["aws:autoscaling:groupName"])'
在Windows上,您需要修改引用,或将jq命令放入文件中。