通过bash过滤json-不区分大小写

通过bash过滤json-不区分大小写,bash,jq,amazon-elb,Bash,Jq,Amazon Elb,我有json代码,需要通过属性DNSName的值对其进行过滤。筛选器必须不区分大小写 我该怎么做?有没有可能用jq解决这个问题 以下是我创建json代码的方式: aws elbv2描述负载平衡器——地区=us-west-2 | jq 我未过滤的json源代码如下所示: { “负载平衡器”:[ { “IpAddressType”:“ipv4”, “VpcId”:“vpc abcdabcd”, “负载均衡器arn”:“arn:aws:ElasticLoadBalancement:us-west

我有json代码,需要通过属性DNSName的值对其进行过滤。筛选器必须不区分大小写

我该怎么做?有没有可能用jq解决这个问题

以下是我创建json代码的方式:

aws elbv2描述负载平衡器——地区=us-west-2 | jq 我未过滤的json源代码如下所示:

{
“负载平衡器”:[
{
“IpAddressType”:“ipv4”,
“VpcId”:“vpc abcdabcd”,
“负载均衡器arn”:“arn:aws:ElasticLoadBalancement:us-west-2:000000000000:loadbalancer/app/MY-LB1/a00000000000000a”,
“国家”:{
“代码”:“活动”
}, 
“DNSName”:“MY-LB1-123454321.us-west-2.elb.amazonaws.com”,
“安全组”:[
“sg-00100”,
“sg-01000”,
“sg-10010001”
], 
“LoadBalancerName”:“MY-LB1”,
“CreatedTime”:“2018-01-01T00:00:00.000Z”,
“方案”:“面向互联网”,
“类型”:“应用程序”,
“CanonicalHostedZoneId”:“zzzzzzzzzzz”,
“可用性区域”:[
{
“子网”:“子网-171717”,
“ZoneName”:“us-west-2a”
}, 
{
“子网”:“子网-2727”,
“ZoneName”:“us-west-2c”
}, 
{
“子网”:“子网-3737”,
“ZoneName”:“us-west-2b”
}
]
}, 
{
“IpAddressType”:“ipv4”,
“VpcId”:“vpc abcdabcd”,
“负载均衡器arn”:“arn:aws:ElasticLoadBalancement:us-west-2:000000000000:loadbalancer/app/MY-LB2/b00000000000000b”,
“国家”:{
“代码”:“活动”
}, 
“DNSName”:“MY-LB2-9876556789.us-west-2.elb.amazonaws.com”,
“安全组”:[
“sg-88818881”
], 
“LoadBalancerName”:“MY-LB2”,
“CreatedTime”:“2018-01-01T00:00:00.000Z”,
“方案”:“面向互联网”,
“类型”:“应用程序”,
“CanonicalHostedZoneId”:“zzzzzzzzzzz”,
“可用性区域”:[
{
“子网”:“子网-5454”,
“ZoneName”:“us-west-2a”
}, 
{
“子网”:“子网-6464”,
“ZoneName”:“us-west-2c”
}, 
{
“子网”:“子网-7474”,
“ZoneName”:“us-west-2b”
}
]
}
]
}
现在,我需要一些bash代码来过滤DNSName属性值为MY-LB2-9876556789.us-west-2.elb.amazonaws.com的记录的结果,并需要返回整个LoadBalancer对象作为结果。我希望我的结果是这样的:

{
“IpAddressType”:“ipv4”,
“VpcId”:“vpc abcdabcd”,
“负载均衡器arn”:“arn:aws:ElasticLoadBalancement:us-west-2:000000000000:loadbalancer/app/MY-LB2/b00000000000000b”,
“国家”:{
“代码”:“活动”
}, 
“DNSName”:“MY-LB2-9876556789.us-west-2.elb.amazonaws.com”,
“安全组”:[
“sg-88818881”
], 
“LoadBalancerName”:“MY-LB2”,
“CreatedTime”:“2018-01-01T00:00:00.000Z”,
“方案”:“面向互联网”,
“类型”:“应用程序”,
“CanonicalHostedZoneId”:“zzzzzzzzzzz”,
“可用性区域”:[
{
“子网”:“子网-5454”,
“ZoneName”:“us-west-2a”
}, 
{
“子网”:“子网-6464”,
“ZoneName”:“us-west-2c”
}, 
{
“子网”:“子网-7474”,
“ZoneName”:“us-west-2b”
}
]
}
有人知道怎么做吗


更新: 此解决方案可行,但不区分大小写:

aws elbv2描述负载平衡器--region=us-west-2 | jq-c“。负载平衡器[]选择(.DNSName | contains(“MY-LB2”)”
更新: 这个解决方案似乎效果更好:

aws elbv2描述负载平衡器--region=us-west-2 | jq-c.负载平衡器[]选择(.DNSName | match(“my-lb2”;“i”))
但是我还没有机会进行详细的测试。

您可能应该使用
test/2
而不是
match/2
,但无论哪种情况,因为问题描述都需要 不区分大小写的相等,可以使用锚定正则表达式:

.LoadBalancers[]
| select(.DNSName | test("^my-lb2-9876556789.us-west-2.elb.amazonaws.com$";"i"))
需要注意的是,
ascii\u upcase
只翻译ascii字符,使用它可能更有效:

 .LoadBalancers[]
 | select(.DNSName | ascii_upcase == "MY-LB2-9876556789.US-WEST-2.ELB.AMAZONAWS.COM")