Regex 在Bash中提取JSON值

Regex 在Bash中提取JSON值,regex,bash,macos,Regex,Bash,Macos,在Bash中,我将响应数据保存到一个变量中 结果如下所示: {"token_type":"Bearer","access_token":"022-8baa5324-f57b-445d-c5ec-821c63a5fd35","expires_in":3600,"scope":"any-website.com"} 现在我想将访问令牌的值提取到另一个var中 在Linux中,我以这种方式解决了这个问题,它可以工作: echo "$response_json" | grep -oP '(?<="

在Bash中,我将响应数据保存到一个变量中

结果如下所示:

{"token_type":"Bearer","access_token":"022-8baa5324-f57b-445d-c5ec-821c63a5fd35","expires_in":3600,"scope":"any-website.com"}
现在我想将访问令牌的值提取到另一个var中

在Linux中,我以这种方式解决了这个问题,它可以工作:

echo "$response_json" | grep -oP '(?<="access_token":")[^"]*'
我的问题是MacOS不再支持grep参数
p
(Perl表达式)。参数
E
不适用于该表达式


如果您能在不需要安装其他Bash工具的情况下提供解决方案帮助,我将不胜感激。

每个人都说他们不想安装新工具,但实际上,像
grep
这样的面向行的工具根本不适合处理JSON这样的结构化文本。如果要使用JSON,请使用专门设计的工具来处理它

这是一种选择:

$ echo "$response_json" | jq -r '.access_token'
022-8baa5324-f57b-445d-c5ec-821c63a5fd35
$ echo "$response_json" | jq -r '.access_token'
022-8baa5324-f57b-445d-c5ec-821c63a5fd35