2012-07-25 118 views
3

嗨,我已經編寫了一個腳本,它讀取網頁的href標記並獲取該網頁上的鏈接並將它們寫入文本文件。現在我有一個包含鏈接的文本文件,如這些,例如:使用bash腳本遍歷包含域的文本文件

http://news.bbc.co.uk/2/hi/health/default.stm 
http://news.bbc.co.uk/weather/ 
http://news.bbc.co.uk/weather/forecast/8?area=London 
http://newsvote.bbc.co.uk/1/shared/fds/hi/business/market_data/overview/default.stm 
http://purl.org/dc/terms/ 
http://static.bbci.co.uk/bbcdotcom/0.3.131/style/3pt_ads.css 
http://static.bbci.co.uk/frameworks/barlesque/2.8.7/desktop/3.5/style/main.css 
http://static.bbci.co.uk/frameworks/pulsesurvey/0.7.0/style/pulse.css 
http://static.bbci.co.uk/wwhomepage-3.5/1.0.48/css/bundles/ie6.css 
http://static.bbci.co.uk/wwhomepage-3.5/1.0.48/css/bundles/ie7.css 
http://static.bbci.co.uk/wwhomepage-3.5/1.0.48/css/bundles/ie8.css 
http://static.bbci.co.uk/wwhomepage-3.5/1.0.48/css/bundles/main.css 
http://static.bbci.co.uk/wwhomepage-3.5/1.0.48/img/iphone.png 
http://www.bbcamerica.com/ 
http://www.bbc.com/future 
http://www.bbc.com/future/ 
http://www.bbc.com/future/story/20120719-how-to-land-on-mars 
http://www.bbc.com/future/story/20120719-road-opens-for-connected-cars 
http://www.bbc.com/future/story/20120724-in-search-of-aliens 
http://www.bbc.com/news/ 

我希望能夠過濾它們,這樣我返回類似:

http://www.bbc.com : 6 
http://static.bbci.co.uk: 15 

值的側面指出該域出現在文件中的次數。我如何能夠在bash中實現這一點,因爲我會通過文件循環。我是bash shell腳本的新手?

+1

http://whathaveyoutried.com/ – 2012-07-25 07:10:08

回答

6

就像這對您的數據。例如這

egrep -o '^http://[^/]+' domain.txt | sort | uniq -c 

輸出:

3 http://news.bbc.co.uk/ 
1 http://newsvote.bbc.co.uk/ 
1 http://purl.org/ 
8 http://static.bbci.co.uk/ 
6 http://www.bbc.com/ 
1 http://www.bbcamerica.com/ 

如果您的訂單是由一個簡單的URL的末尾沒有斜線此方法適用於均勻,所以

http://www.bbc.com/news 
http://www.bbc.com/ 
http://www.bbc.com 

將全部在同一組中。

如果你想允許HTTPS,那麼你可以這樣寫:

egrep -o '^https?://[^/]+' domain.txt | sort | uniq -c 

如果其他協議是可能的,如FTP,郵寄地址等,你甚至可以很寬鬆,寫:

egrep -o '^[^:]+://[^/]+' domain.txt | sort | uniq -c 
+1

「http://en.wikipedia.org/」從哪裏來? ;) – 2012-07-25 07:15:28

+1

+1赫,好抓!我將OP的代碼粘貼到一個文本編輯器窗口中,該窗口以Wikipedia url作爲唯一的行。第一個bbc.co.uk系列在該行的末尾開始,所以我最終只有2個bbc.co.uk。清理它。 – 2012-07-25 07:18:46

+0

這真是不可思議......非常感謝 – roykasa 2012-07-25 07:19:26

7
$ cut -d/ -f-3 urls.txt | sort | uniq -c     
3 http://news.bbc.co.uk 
1 http://newsvote.bbc.co.uk 
1 http://purl.org 
8 http://static.bbci.co.uk 
1 http://www.bbcamerica.com 
6 http://www.bbc.com 
+0

非常感謝很多...只是我需要 – roykasa 2012-07-25 07:18:33

+0

+1切比我的正則表達式更清潔。 – 2012-07-25 07:20:10

+0

錯誤的輸出格式。這裏是'sed'來解決它:'| sed -e's * *([0-9] * \)\(。* \)/ \ 2:\ 1 /'' – Sorpigal 2012-07-25 11:35:37