如何解决在 JQ 中不区分大小写匹配固定字符串
问题: .contains 不区分大小写;其中测试和匹配会产生大量噪音,因为它不是字符串匹配。
我的剧本
#!/bin/bash
filename='v.txt'
while read p; do
jq 'if .tweet | contains('\"$p\"') then . |= . + {vendor: '\"$p\"'} else empty end' sfilter.json
done < $filename
这是完美的工作;但在内容不敏感的情况下它不起作用|替代方案,测试和匹配也没有成功,因为他们没有做字符串匹配的工作。
解决方法
test
可以进行文字字符串匹配。
test("\\Qstring\\E"; "i")
,
正如@OguzIsmail 所指出的,如果您的 jq 的正则表达式引擎支持 \\Q...\\E
,您可以使用它。但是,并非所有版本的 oniguruma(因此并非所有已发布的 jq 版本)都提供此类支持;无论如何,以下用于“去正则化”字符串的 jq def 可以帮助减少“噪音”:
def deregex:
reduce ("\\\\","\\*","\\^","\\?","\\+","\\.","\\!","\\{","\\}","\\[","\\]","\\$","\\|" ) as $c
(.; gsub( $c; $c));
示例
有了上面的定义,以下:
"A*b" | test( "a*b"| deregex | debug; "i")
产生:
["DEBUG:","a\\*b"]
true
,
你也可以使用 ascii_downcase :
1234 - This is a test |18.055,81 |-18.055,81 |0,00 |0,00 |18.055,81
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。