如何在 jq 过滤器文件中使用多行?

问题描述 投票:0回答:1

我正在阅读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 上尝试过此操作并得到相同的结果。

json bash command-line-interface jq
1个回答
0
投票

哦!我想我明白了 - 你不需要使用

\
来分割线,你可以只分割线,例如

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

这适用于您的用例吗?还是我理解错了?

© www.soinside.com 2019 - 2024. All rights reserved.