我是jq的新手,我正在尝试解析我从命令获得的输出json -
aws cloudformation list-stacks --stack-status-filter CREATE_COMPLETE
获取新的输出,其中键的值与特定模式匹配。
例如,这是我之前命令的json输出 -
{
"StackSummaries": [
{
"StackId": "arn:aws:213dqwqwdqwdqwdq",
"StackName": "monkeyman",
"CreationTime": "2017-06-06T20:52:59.728Z",
"StackStatus": "CREATE_COMPLETE",
"TemplateDescription": "Liaison API ELB cloud formation script"
},
{
"StackId": "arn:aws:csdfsdfcsdfsdfsdfsdfsdfgdfgfdg",
"StackName": "monkeyman2",
"CreationTime": "2017-06-06T20:51:55.191Z",
"StackStatus": "CREATE_COMPLETE",
"TemplateDescription": "yoohooo instance"
},
{
"StackId": "arn:aws:sdffgds444fsdfsdfgdfgfdg",
"StackName": "starfish2",
"CreationTime": "2017-06-06T20:51:55.191Z",
"StackStatus": "CREATE_COMPLETE",
"TemplateDescription": "helloworld instance"
},
{
"StackId": "arn:aws:csdfsdfcsdfsdfsdfsdfsdfgdfgfdg",
"StackName": "bulldog4",
"CreationTime": "2017-06-06T20:51:55.191Z",
"StackStatus": "CREATE_COMPLETE",
"TemplateDescription": "night night instance"
},
{
"StackId": "arn:aws:yhyhyhyhyhysdfgdfgfdg",
"StackName": "carrotman",
"CreationTime": "2017-06-06T20:51:55.191Z",
"StackStatus": "CREATE_COMPLETE",
"TemplateDescription": "surprise mo instance"
}
]
}
这里我需要通过将第一个输出传递给jq来创建一个新的输出json,其中StackName的开始是 monkeyman 和 bulldog ,它应该看起来像 -
{
"StackSummaries": [
{
"StackId": "arn:aws:213dqwqwdqwdqwdq",
"StackName": "monkeyman",
"CreationTime": "2017-06-06T20:52:59.728Z",
"StackStatus": "CREATE_COMPLETE",
"TemplateDescription": "Liaison API ELB cloud formation script"
},
{
"StackId": "arn:aws:csdfsdfcsdfsdfsdfsdfsdfgdfgfdg",
"StackName": "monkeyman2",
"CreationTime": "2017-06-06T20:51:55.191Z",
"StackStatus": "CREATE_COMPLETE",
"TemplateDescription": "yoohooo instance"
},
{
"StackId": "arn:aws:csdfsdfcsdfsdfsdfsdfsdfgdfgfdg",
"StackName": "bulldog4",
"CreationTime": "2017-06-06T20:51:55.191Z",
"StackStatus": "CREATE_COMPLETE",
"TemplateDescription": "night night instance"
}
]
}
我已经尝试了很多,我能够以某种方式使用基本的unix split和regex命令来做这件事,但有些东西告诉我直接使用jq会更简单,也不那么麻烦。
答案 0 :(得分:2)
使用jq
可以轻松jq '.[] |= map(select(.StackName | startswith("monkeyman"), startswith("bulldog")))'
简而言之,map(x)将x应用于提供给它的每个对象。 select(y)选择满足条件y的对象。在这种情况下,条件y是有一个名为StackName的键,其值以“monkeyman”或“bulldog”开头。