2017-03-08 197 views
0

道歉这样的伪问题,但这是用curl命令我的第一次,现在我从什么地方该命令提取以下字符串SED JSON正则表达式

{“成功”:真实的,“结果” :1, “总”:1, “更多”:假, “偏移”:0, “命中”:[{ “路径”: “/家庭/用户/ Vq7DPVRHzGVK - OTJsHs”, “摘录”: “”, “名”: “Vq7DPVRHzGVK - OTJsHs”, “称号”: “Vq7DPVRHzGVK - OTJsHs”, “上次更改”: “2017年3月3日16时45分46秒 ”, “创造”:“2017年3月3日16:45:46“}]}

我输入curl输出到sed与下面的脚本:

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

结果:

/家庭/用户/ Vq7DPVRHzGVK - OTJsHs

任何人都可以解释如何在这里的正则表达式的工作?和我怎么只Vq7DPVRHzGVK结果 - OTJsHs,而不是包括/ home/user的路径?

回答

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

非常快速和准确的答案!感谢您的帮助 – DEN

+0

@SLePort我做的,除了欣赏和赞美没事REVO,对不对? – DEN

+0

@DEN对不起,太快了评论。我没有看到你是一个有经验的用户...... – SLePort

0

Regex demo

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

+0

我得到的回报这个错误的sed:-e表达式#1,焦炭39:未结束的'S'命令 – DEN

+0

SED没有按不支持PCRE。 – revo

+0

感谢帮助反正;) – DEN