2017-03-08 13 views
0

は、このようなダミーの質問をお詫び申し上げますが、これはcurlコマンドを使用して私の最初の時間であり、今、私は次の文字列sedのJSON正規表現

{「成功」を抽出するためにどこからか、このコマンドを得た:真、「結果を」 :1、 "合計":1、 "more":偽、 "オフセット":0、 "ヒット":[{"path": "/ home/users/Vq7DPVRHzGVK - OTJsHs"、 "excerpt" "name": "Vq7DPVRHzGVK - OTJsHs"、 "title": "Vq7DPVRHzGVK - OTJsHs"、 "lastModified": "2017-03-03 16:45:46"、 "created": "2017-03-03 16:45:46 "}]}

パイプcurl出力を次のスクリプトで:

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

結果:

/ホーム/ユーザー/ Vq7DPVRHzGVK - OTJsHs

誰でも正規表現の仕事はここにどのように説明できますか?/home/userパスを含めるのではなく、Vq7DPVRHzGVK - OTJsHsのための結果を得るにはどうすればよいですか?

答えて

1

説明:

^.*   # 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 /
     ----------^------------  ---^--- 
      Pattern   Replacement string 

先頭のスラッシュを除くパス値の二重引用符の間のすべてのものである最初のキャプチャグループを使用します。 -e式#1、CHAR 39::私はsedの見返りに、このエラーまし

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

非常に高速で正確な答え!助けてくれてありがとう – DEN

+0

@SLePort私はrevoへの感謝と褒めを除いて大丈夫ですよね? – DEN

+0

@DEN申し訳ありませんが、速すぎるコメント。私はあなたが経験豊富なユーザーであるとは思わなかった... – SLePort

0

Regex demo

正規表現:.*"path\":"\K[\/\w]+(?=\/)\/\K[^"]+

+0

:あなたが最後のセクションに全体の一部をキャプチャからグループをキャプチャする変更されたい

終端されていない 's'はコマンドを – DEN

+0

SEDのdoesn PCREをサポートしていません。 – revo

+0

助けてくれてありがとう;) – DEN