sed JSON正则表达式

时间:2017-03-08 05:03:01

标签: json regex sed

为这样的虚拟问题道歉,但这是我第一次使用curl命令,现在我从某个地方获取此命令以提取以下字符串

  

{"成功":真,"结果":1,"总":1,"更":假,&# 34;偏移":0,"命中":[{"路径":" /家庭/用户/ Vq7DPVRHzGVK - OTJsHs""摘录":"""名称":" Vq7DPVRHzGVK - OTJsHs""标题":" Vq7DPVRHzGVK- -OTJsHs""上次更改时间":" 2017年3月3日   16:45:46","创建":" 2017-03-03 16:45:46"}]}

我使用以下脚本将curl输出传递给sed

sed -e 's/^.*"path":"\([^"]*\)".*$/\1/

结果:

  

/家庭/用户/ Vq7DPVRHzGVK - OTJsHs

任何人都可以解释这里的正则表达式是如何工作的吗?如何只获得 Vq7DPVRHzGVK-OTJsHs 的结果,而不是包含/ home / user路径?

2 个答案:

答案 0 :(得分:1)

说明:

s/   ^.*"path":"\([^"]*\)".*$   /  \1   /
      ----------^------------     ---^---
             Pattern         Replacement string 

正则表达式如何工作:

^.*         # Match beginning of input string & anything else
"path":"    # Up to literal string `"path":"`
\([^"]*\)   # Then match slash and match + group anything up to a double quote `"`
".*$        # Match double quote and the rest of input string

通过替换字符串\1,您将使用第一个捕获组替换整个匹配部分,这是除了开始斜杠之外的路径值的双引号之间的所有内容。

您想要的是将捕获组从捕获整个部分更改为最后一部分:

s/^.*"path":"[^"]*\/\([^"]*\)".*$/\1/

答案 1 :(得分:0)

Regex demo

正则表达式:.*"path\":"\K[\/\w]+(?=\/)\/\K[^"]+