如何使用 jq 命令行 JSON 处理器输出反向匹配?
How to output inverted matches using the jq command-line JSON processor?
是否可以使用jq command-line JSON processor输出反向匹配?为此,工具 grep
支持选项 -v, --invert-match: select non-matching lines
。
例如,我正在搜索如下命令。但是,without(...)
不存在:
$ echo '{"a": 0, "b": 1, "c": 2}' | jq '. | without(c)'
{
"a": 0,
"b": 1
}
jq
没有grep -v
等程序选项。
- 我没能找到 basic filter。
是否支持反向匹配?
在写这个问题时,我发现 builtin del(path_expression)
function 解决了这个问题:
The builtin function del removes a key and its corresponding value from an object.
$ echo '{"a": 0, "b": 1, "c": 2}' | jq 'del(.c)'
{
"a": 0,
"b": 1
}
jq 通常是极简主义的,所以当在寻找相反的东西时有疑问时,not
总是可以提供帮助,例如
with_entries(select(.key == "c"|not))
这里可能不熟悉的是 jq 中的 not
是一个普通的 0 元过滤器。
当然也支持!=
:
with_entries(select(.key != "c"))
由于您提到了 grep
,可能值得注意的是 grep -v "REGEX"
的 jq“等价物”将是 test("REGEX")|not
。
顺便说一下,您第一次尝试时的初始 . |
是没有必要的。
是否可以使用jq command-line JSON processor输出反向匹配?为此,工具 grep
支持选项 -v, --invert-match: select non-matching lines
。
例如,我正在搜索如下命令。但是,without(...)
不存在:
$ echo '{"a": 0, "b": 1, "c": 2}' | jq '. | without(c)'
{
"a": 0,
"b": 1
}
jq
没有grep -v
等程序选项。- 我没能找到 basic filter。
是否支持反向匹配?
在写这个问题时,我发现 builtin del(path_expression)
function 解决了这个问题:
The builtin function del removes a key and its corresponding value from an object.
$ echo '{"a": 0, "b": 1, "c": 2}' | jq 'del(.c)'
{
"a": 0,
"b": 1
}
jq 通常是极简主义的,所以当在寻找相反的东西时有疑问时,not
总是可以提供帮助,例如
with_entries(select(.key == "c"|not))
这里可能不熟悉的是 jq 中的 not
是一个普通的 0 元过滤器。
当然也支持!=
:
with_entries(select(.key != "c"))
由于您提到了 grep
,可能值得注意的是 grep -v "REGEX"
的 jq“等价物”将是 test("REGEX")|not
。
顺便说一下,您第一次尝试时的初始 . |
是没有必要的。