让我们考虑一个包含以下 JSON 文档的 a.txt 文件:
{ "body": { "session_info": { "session_id": "BAzcWu2nHVXrXrx096PMZOaFslgWrjx1", "email": "admin@site.com" }, "status": { "msg": "success" } }
Run Code Online (Sandbox Code Playgroud)
我正在编写一个 bash 脚本,我需要为其提取 session_id 值。我开始使用以下正则表达式进行 grep'ing,但没有成功(没有返回任何内容):
#!/bin/bash
regex="session_id\": \"[A-Z0-9a-z]{32}.*"
echo "REGEX=$regex"
echo "----"
content=$(cat a.txt)
echo $content
echo "----"
[[ $content =~ $regex ]]
sessionid="${BASH_REMATCH[1]}"
echo ${sessionid}
Run Code Online (Sandbox Code Playgroud)
这有什么问题?
使用更容易做到这一点grep -oP:
grep -oP '"session_id": "\K[A-Z0-9a-z]{32}' file.json
BAzcWu2nHVXrXrx096PMZOaFslgWrjx1
Run Code Online (Sandbox Code Playgroud)
但是为了更好地解析 JSON,最好使用命令行 JSON 解析工具:jq
-P 使用 PCRE 正则表达式\K 在正则表达式中重置匹配的信息您的正则表达式不起作用的可能原因是因为您没有对任何内容进行分组并尝试使用:"${BASH_REMATCH[1]}"它指的是第一个捕获的组。