2016-04-11 63 views
0

我嘗試這種模式在正則表達式101我怎樣才能執行此grep命令

<a href="http://google.com">Google.com</a> 
<A target="_blank" href='http://example.com/files.html'>An Example</A> 
<a id="link23" HREF = "file23.html" target="_TOP">File #23</a> 
<a href="images/mypic.png">See my picture!</a> 
<a href="mailto:[email protected]">Email Joel</a> 

匹配,並且我做了這個regex- < [AA]。 \ S(HREF | HREF)\ S = \ s?( '|「)。(' |」)> * </[AA]>

現在,當我試圖使用grep命令通過我的命令行,它會拋出一個錯誤。

./mdlinks.sh: line 3: unexpected EOF while looking for matching `"' 
./mdlinks.sh: line 4: syntax error: unexpected end of file 

這裏是源文件

#! /usr/bin/env bash 
CONTENT=$(curl $1) 
echo "$CONTENT" | grep -E -o '<[aA].*\s(HREF|href)\s?=\s?('|").*('|")>.*<\/[aA]>' >> mdlinks.txt 
+0

http://stackoverflow.com/questions/1881237/easiest-way-to-extract-the -urls-from-an-html-page-using-sed-or-awk-only – MattSizzle

+0

將xmllint與xpath查詢結合使用:http://xmlsoft.org/xmllint.html –

回答

1

你一定要逃逸正則表達式的單引號,而且你的家當有一個額外的空間(儘管這只是風格):

#!/usr/bin/env bash 
CONTENT=$(curl $1) 
echo "$CONTENT" | grep -E -o '<[aA].*\s(HREF|href)\s?=\s?('\''|").*('\''|")>.*<\/[aA]>' >> mdlinks.txt 

對於正則表達式,可能需要使用雙引號,而不是單引號。你仍然不得不逃離表達內雙引號,但是轉義雙引號是乾淨了一點:

#!/usr/bin/env bash 
CONTENT=$(curl $1) 
echo "$CONTENT" | grep -E -o "<[aA].*\s(HREF|href)\s?=\s?('|\").*('|\")>.*<\/[aA]>" >> mdlinks.txt 
+0

非常感謝您的回覆。但我仍然面臨問題,mdlinks文件只匹配1個錨標記,並不是文件中存在的所有錨標記 –

+0

這是您的正則表達式的問題。嘗試使用非貪婪匹配('*?')而不是貪婪匹配('*',這是默認行爲)。 – user2926055

相關問題