使用jq的contains()实现精确字符串匹配问题求助
解决jq精确匹配字段值的问题
你的问题出在contains()的行为上——它是子字符串匹配,只要目标字符串里包含指定的子串就会命中,所以会返回Johnny、Johnie这类包含John的结果。
要实现精确匹配,直接用相等运算符==替换contains()即可,命令修改为:
jq --arg NAME "John" '.[] | select(.group == $NAME)'
额外说明
- 你之前尝试用
*通配符没用,是因为jq的contains()不支持通配符语法。如果需要模糊匹配但又要限定边界(比如匹配以John开头/结尾),才需要用正则匹配的test()函数,例如匹配严格等于John(大小写敏感)的正则写法是:jq --arg NAME "John" '.[] | select(.group | test("^" + $NAME + "$"))' - 如果需要大小写不敏感的精确匹配,可以给
test()加i参数:jq --arg NAME "john" '.[] | select(.group | test("^" + $NAME + "$"; "i"))'
内容的提问来源于stack exchange,提问作者Vanaan
相关产品推荐
相关产品推荐

