我正在阅读jq 手册,上面写着:
-f filename / --from-file filename:
从文件而不是像 awk 那样从命令行读取过滤器 -f 选项。您还可以使用“#”进行评论。
我在命令行中输入了以下内容:
$ cat input.json | jq -rf filter.jq
我的
filter.jq
文件是:
.signal[] | .name
# .signal[] | select(.name | contains("signal")) as $matches
这给了我一个错误:
$ cat input.json | jq -rf filter.jq
jq: error: syntax error, unexpected INVALID_CHARACTER, expecting $end (Unix shell quoting issues?) at <top-level>, line 1:
jq: 1 compile error
如果我将
\
附加到第一行的末尾,则会收到不同的错误:
$ cat input.json | jq -rf filter.jq
jq: error: syntax error, unexpected INVALID_CHARACTER, expecting $end (Unix shell quoting issues?) at <top-level>, line 1:
\
jq: 1 compile error
我也尝试过
\\
,结果相似。
我发现的唯一解决方法是将这两行合并为一行。但这限制了我记录过滤器并将该文件用作实验场地的能力。如何在 jq 过滤器文件中使用多行?
注意:我已在 cygwin 和 WSL 上尝试过此操作并得到相同的结果。
哦!我想我明白了 - 你不需要使用
\
来分割线,你可以只分割线,例如
cat test.json
[
{
"name": "apple",
"color": "green",
"price": 1.2
},
{
"name": "banana",
"color": "yellow",
"price": 0.5
},
{
"name": "kiwi",
"color": "green",
"price": 1.25
}
]
cat test.jq
.[] |
.name
cat test.json | jq -rf test.jq
apple
banana
kiwi
这适用于您的用例吗?还是我理解错了?