2010-06-09 62 views
4

從過去幾天我試圖開發一個正則表達式,它使用grep從給定的網頁中獲取所有外部鏈接。正則表達式使用grep從html文件中找到外部鏈接

這裏是我的grep命令

grep -h -o -e "\(\(mailto:\|\(\(ht\|f\)tp\(s\?\)\)\)\://\)\{1\}\(.*\?\)" "/mnt/websites_folder/folder_to_search" -r 

現在的grep似乎在給定的行

如果HTML文件包含這樣的事情上一樣的外部鏈接後返回的一切line

Google

https://yahoo.com'> Yahoo

然後給定的grep命令返回以下結果

http://www.google.com">Google</a><p><a href='https://yahoo.com'>Yahoo</a></p> 

這裏的想法是,如果一個HTML文件包含在同一行超過一個鏈接(irrespective in a,img etc),那麼正則表達式應該只獲取鏈接,而不是所有該行

我設法內容開發的相同的rubular.com 正則表達式是遵循

("|')(\b((ht|f)tps?:\/\/)(.*?)\b)("|') 

與上面的輸入 工作,但我不能在grep 複製相同的任何人都可以幫助 我不能修改html文件,所以不要問我這樣做,我既不能找到每個特定的標籤,並檢查它們的屬性來獲得外部鏈接,因爲它addup處理時間和我的應用程序不要求

謝謝

回答

3

試試這個:

貓/路徑/到/文件| 。egrep的-o「(?的mailto | FTP | HTTP(S)://){1} [^'\ 「] +」

egrep -o "(mailto|ftp|http(s)?://){1}[^'\"]+" /path/to/file 

輸出每行一個鏈路它假定每一個環節是內部單。或者雙引號要排除一些特定領域的聯繫,使用-v

egrep -o "(mailto|ftp|http(s)?://){1}[^'\"]+" /path/to/file | egrep -v "yahoo.com" 
+0

謝謝你的回覆它爲我工作再次感謝。 – Amar 2010-06-10 04:45:02

+1

不客氣。 '謝謝'太多了,接受一個答案就足夠了(: – hudolejev 2010-06-10 17:19:22

+1

可能是[UUOC](http://en.wikipedia.org/wiki/Cat_(Unix)#Useless_use_of_cat)。 – miku 2013-04-15 05:47:40

1

默認的grep打印整個線找到匹配上的-o開關只選擇一條線的匹配部分見man page