如何用jq单行命令实现数组与字符串的不区分大小写子串匹配?
解决方案
可以用这行简洁的jq单行命令实现需求:
jq --arg x "ThiS.FIle.is.HeRe" 'any(.[]; ascii_downcase | $x | ascii_downcase | contains(.))' /some/file.json
命令说明
--arg x "ThiS.FIle.is.HeRe":将目标字符串传入jq的运行环境any(.[]; ...):遍历数组内所有元素,只要有一个元素满足后续条件就返回true,全部不满足则返回falseascii_downcase:把数组元素和目标字符串统一转为小写,实现不区分大小写的匹配逻辑contains(.):判断转小写后的目标字符串是否包含转小写后的当前数组元素(对应“数组元素是目标字符串的子串”的需求)
如果需要输出不带引号的纯布尔值,加上-r参数即可:
jq -r --arg x "ThiS.FIle.is.HeRe" 'any(.[]; ascii_downcase | $x | ascii_downcase | contains(.))' /some/file.json
内容的提问来源于stack exchange,提问作者Gregor Isack
相关产品推荐
相关产品推荐

