jq 如何不区分大小写过滤不包含Key的数组对象?
jq How to filter array object does not contains Key with case insensitively?
我正在尝试通过标签键过滤我的 aws ec2 实例。
我想得到 ec2 实例没有特定密钥的结果(在我的示例中,它是 env 或 appname)
aws ec2 describe-instances | jq -c '.Reservations[].Instances[] | select(contains({Tags: [{Key:"env"}]}, {Tags:[{Key:"AppName"}]} | not) | {instanceId: .InstanceId, tags: .Tags}'
哪个returns
但是我注意到我在Key中混合了大小写,例如
{
{
"InstanceId": "t-1234",
"Tags": [
{"Key": "Name",
"Value": "Foo"},
{"Key": "env",
"Value": "prod"}
]
},
{
"InstanceId": "t-1235",
"Tags": [
{"Key": "Name",
"Value": "Bar"},
{"Key": "Env",
"Value": "prod"},
{"Key": "AppName",
"Value": "BarApp"}
]
},
{
"InstanceId": "t-1236",
"Tags": [
{"Key": "Name",
"Value": "Bar"},
]
},
}
对于这个例子,我想要的输出是,
{
{ // this instance does not have AppName
"InstanceId": "t-1234",
"Tags": [
{"Key": "Name",
"Value": "Foo"},
{"Key": "env",
"Value": "prod"}
]
},
{ // this instance does not have AppName and env
"InstanceId": "t-1236",
"Tags": [
{"Key": "Name",
"Value": "Bar"},
]
},
}
我一直在搜索和阅读我需要使用 ascii_downcase
或 ascii_uppercase
,但一直申请失败。我如何改进我的 jq 语句,以便我可以过滤没有特定关键大小写的 ec2 实例(例如 env
或 ENV
或 Env
)?
谢谢
我对问题描述(相对于示例)的理解使我想到了这个 jq 程序:
map(select( any(.Tags[]; .Key | ascii_downcase | IN( "env", "appname")) | not))
希望此处 any
和 IN
的使用将指导您找到所需的公式。
我正在尝试通过标签键过滤我的 aws ec2 实例。 我想得到 ec2 实例没有特定密钥的结果(在我的示例中,它是 env 或 appname)
aws ec2 describe-instances | jq -c '.Reservations[].Instances[] | select(contains({Tags: [{Key:"env"}]}, {Tags:[{Key:"AppName"}]} | not) | {instanceId: .InstanceId, tags: .Tags}'
哪个returns 但是我注意到我在Key中混合了大小写,例如
{
{
"InstanceId": "t-1234",
"Tags": [
{"Key": "Name",
"Value": "Foo"},
{"Key": "env",
"Value": "prod"}
]
},
{
"InstanceId": "t-1235",
"Tags": [
{"Key": "Name",
"Value": "Bar"},
{"Key": "Env",
"Value": "prod"},
{"Key": "AppName",
"Value": "BarApp"}
]
},
{
"InstanceId": "t-1236",
"Tags": [
{"Key": "Name",
"Value": "Bar"},
]
},
}
对于这个例子,我想要的输出是,
{
{ // this instance does not have AppName
"InstanceId": "t-1234",
"Tags": [
{"Key": "Name",
"Value": "Foo"},
{"Key": "env",
"Value": "prod"}
]
},
{ // this instance does not have AppName and env
"InstanceId": "t-1236",
"Tags": [
{"Key": "Name",
"Value": "Bar"},
]
},
}
我一直在搜索和阅读我需要使用 ascii_downcase
或 ascii_uppercase
,但一直申请失败。我如何改进我的 jq 语句,以便我可以过滤没有特定关键大小写的 ec2 实例(例如 env
或 ENV
或 Env
)?
谢谢
我对问题描述(相对于示例)的理解使我想到了这个 jq 程序:
map(select( any(.Tags[]; .Key | ascii_downcase | IN( "env", "appname")) | not))
希望此处 any
和 IN
的使用将指导您找到所需的公式。