如何在jq过滤器文件中使用多行代码?
解决jq过滤器文件多行代码与注释的语法错误问题
错误的核心原因是你的filter.jq文件使用了Windows风格的CRLF(\r\n)换行符,在WSL/Cygwin环境中,jq会将行尾的\r字符识别为无效字符,从而抛出语法错误。
解决步骤:
检查文件换行符格式
执行以下命令查看文件的换行符:cat -A filter.jq如果行尾显示
^M$,说明文件是CRLF格式(Windows风格)。转换为Unix风格LF换行符
- 方法一:使用
dos2unix工具转换dos2unix filter.jq - 方法二:用Vim编辑器修改
打开文件后执行:
保存退出即可完成格式转换。:set ff=unix :wq
- 方法一:使用
正确的过滤器文件写法
转换后,你可以自由拆分代码为多行,也可以添加单行注释(#开头),无需使用反斜杠续行:# 提取signal数组中每个元素的name字段 .signal[] | .name # 以下是被注释的备用过滤规则 # .signal[] | select(.name | contains("signal")) as $matches验证执行
再次运行命令即可正常执行:cat input.json | jq -rf filter.jq
内容的提问来源于stack exchange,提问作者Daniel Kaplan
相关产品推荐
相关产品推荐

