为这样的虚拟问题道歉,但这是我第一次使用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路径?
答案 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)
正则表达式:.*"path\":"\K[\/\w]+(?=\/)\/\K[^"]+