使用JQ检测AWS CLI返回的IPSet数组中是否包含指定IP地址
JQ判断AWS WAF IPSet中是否存在指定IP的方法
你之前的写法是遍历数组输出每个元素的校验结果,只要用any()函数聚合结果即可得到单个布尔值。
精确匹配完整CIDR字符串
如果你要匹配的是Addresses数组中完整的CIDR条目(比如查询192.0.2.0/16是否存在),使用如下命令:
echo "$single_ip_set" | jq '.IPSet.Addresses | any(. == "192.0.2.0/16")'
输出结果为唯一的true或false。
模糊匹配IP字符串
如果你需要判断数组的CIDR条目中是否包含目标IP的文本片段(和你之前用contains的逻辑一致),使用如下命令:
echo "$single_ip_set" | jq '.IPSet.Addresses | any(contains("255.255.255.8"))'
脚本场景适配
如果要在shell脚本中直接通过退出码判断结果,可以加上-e参数:
echo "$single_ip_set" | jq -e '.IPSet.Addresses | any(. == "192.0.2.0/16")' > /dev/null # 执行后$?为0表示IP存在,为1表示IP不存在
注意:原生jq不支持IP网段归属计算,如果你需要判断某个单IP是否属于数组内的CIDR网段(比如判断192.0.2.123是否属于192.0.2.0/16),需要额外配合
ipcalc、sipcalc等IP计算工具实现。
内容的提问来源于stack exchange,提问作者Robert Smith
相关产品推荐
相关产品推荐

