jq传递正则表达式为--arg参数无结果,求解决及bash脚本适配方案
解决jq通过--arg传递正则无结果的问题
直接修复方案
方案1:改用--argjson传递正则
--arg会将参数作为普通字符串处理,而--argjson会按JSON格式解析参数,确保正则里的Unicode字符和元字符正确传递给jq:
jq --argjson QUERY '"^ש[ְ-ׇ]*ל[ְ-ׇ]*ו[ְ-ׇ]*ם$"' '.[] | select(.translated | test($QUERY))' dict-he-en.json
方案2:给test函数添加Unicode模式标志
在test函数中加入"u"标志,强制jq以Unicode模式解析正则,正确识别希伯来语变音符号的字符范围:
jq --arg QUERY "^ש[ְ-ׇ]*ל[ְ-ׇ]*ו[ְ-ׇ]*ם$" '.[] | select(.translated | test($QUERY, "u"))' dict-he-en.json
替代方案(适合bash脚本)
方案1:使用独立jq脚本文件
将查询逻辑写入单独的文件(比如filter.jq):
.[] | select(.translated | test($QUERY))
然后在bash脚本中调用:
jq --arg QUERY "^ש[ְ-ׇ]*ל[ְ-ׇ]*ו[ְ-ׇ]*ם$" -f filter.jq dict-he-en.json
方案2:确保bash环境的Unicode编码正确
在脚本开头设置正确的locale,避免字符编码传递异常:
export LC_ALL=en_US.UTF-8 QUERY="^ש[ְ-ׇ]*ל[ְ-ׇ]*ו[ְ-ׇ]*ם$" jq --arg QUERY "$QUERY" '.[] | select(.translated | test($QUERY))' dict-he-en.json
内容的提问来源于stack exchange,提问作者צבי
相关产品推荐
相关产品推荐

