2017-03-08 234 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