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_downcaseascii_uppercase,但一直申请失败。我如何改进我的 jq 语句,以便我可以过滤没有特定关键大小写的 ec2 实例(例如 envENVEnv)?

谢谢

我对问题描述(相对于示例)的理解使我想到了这个 jq 程序:

map(select( any(.Tags[]; .Key | ascii_downcase | IN( "env", "appname")) | not))

希望此处 anyIN 的使用将指导您找到所需的公式。