【问题标题】:How to output inverted matches using the jq command-line JSON processor?如何使用 jq 命令行 JSON 处理器输出反向匹配?
【发布时间】:2020-11-21 06:56:30
【问题描述】:

是否可以使用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

是否支持反向匹配?

【问题讨论】:

    标签: json jq negation


    【解决方案1】:

    jq 通常是极简主义的,所以当你在寻找相反的东西时有疑问时,not 总是可以提供帮助,例如

    with_entries(select(.key == "c"|not))
    

    这里可能不熟悉的是 jq 中的not 是一个普通的 0-arity 过滤器。

    当然!=也支持:

    with_entries(select(.key != "c"))
    

    既然您提到了grep,可能值得注意的是grep -v "REGEX" 的jq“等效”将是test("REGEX")|not

    顺便说一句,您第一次尝试时的初始. | 是不必要的。

    【讨论】:

      【解决方案2】:

      在写这个问题时,我发现builtin del(path_expression) function 解决了这个问题:

      内置函数 del 从对象中删除一个键及其对应的值。

      $ echo '{"a": 0, "b": 1, "c": 2}' | jq 'del(.c)'
      {
        "a": 0,
        "b": 1
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-26
        • 1970-01-01
        • 2019-08-31
        • 2018-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多