代码之家  ›  专栏  ›  技术社区  ›  lonix

使用sed从JSON中提取非贪婪正则表达式

  •  0
  • lonix  · 技术社区  · 1 年前

    一些JSON:

    {"theSecret":"flhiusdh4543sdfasf34sdf+fsfs/sdf43454=","foo":{"bar":41,"something":"hello world","else":"hi","date":20230101,"qux":0,"digest":"sfhusdf234jkkjuiui23kjkj/SFDF34SDSFDS="}}
    

    经过修饰:

    {
      "theSecret": "flhiusdh4543sdfasf34sdf+fsfs/sdf43454=",
      "foo": {
        "bar": 41,
        "something": "hello world",
        "else": "hi",
        "date": 20230101,
        "qux": 0,
        "digest": "sfhusdf234jkkjuiui23kjkj/SFDF34SDSFDS="
      }
    }
    

    我想要 theSecret 钥匙

    我试过了:

    $ echo "$json" | sed -nE 's/.*theSecret":"(.*)".*/\1/p'    # (.*?) doesn't work
    

    它给出了:

    flhiusdh4543................4SDSFDS=
    

    即来自 秘书 直到年底 digest 。这是因为sed缺乏非贪婪的量词,所以 .*? 不起作用。

    我该怎么做?

    (这是在一个高山集装箱中 sed , grep awk jq perl 不可用。)

    1 回复  |  直到 1 年前
        1
  •  1
  •   Barmar    1 年前

    不要使用非贪婪的量词,而是使用与终止符不匹配的模式 "

    $ echo "$json" | sed -nE 's/.*theSecret":"([^"]*)".*/\1/p'    # (.*?) doesn't work