2012-08-16 57 views
0

我有一個從wiki導出的頁面,我想用bash找到該頁面上的所有鏈接。該頁面上的所有鏈接均採用的形式。我有一個腳本,做:在bash中提取多個子字符串

... 
# First search for the links to the pages                                  
search=`grep '\[wiki:' pages/*` 

# Check is our search turned up anything                                  
if [ -n "$search" ]; then 
    # Now, we want to cut out the page name and find unique listings                           
    uniquePages=`echo "$search" | cut -d'[' -f 2 | cut -d']' -f 1 | cut -d':' -f2 | cut -d' ' -f 1 | sort -u` 
.... 

然而,當出現一個grep的結果與它的多個[wiki:文本,只拉了最後一個,而不是任何其他人。例如,如果$search是:

在開始配置之前,必須安裝所有必需的庫以供Cmake檢測。如果您錯過了這一步,請參閱[wiki:CT/Checklist/Libraries] Libr通過按[t],您可以切換到高級模式屏幕,其中有更多詳細信息。這裏]。獲取關於ea的信息 - '''安裝Cantera''':如果Cantera沒有正確安裝,或者您沒有找到安裝文件'''〜/ setup_cantera'',您應該會收到以下內容消息請參閱[維基:CT/FormulationCantera「坎特拉安裝」]。解決這個問題的網頁,如果您打算使用內置的運輸,熱力學和化學您可以設置坎特拉選項爲關閉

。那麼它只返回CT/FormulationCantera,它不會給我任何其他的鏈接。我知道這是由於使用cut,所以我需要替換$uniquepages一行。

有沒有人在bash中有任何建議?如果需要的話,它可以使用sed或perl,但是我希望單行提取一個頁面名稱列表,如果可能的話。

回答

2
egrep -o '\[wiki:[^]]*]' pages/* | sed 's/\[wiki://;s/]//' | sort -u 

upd。刪除所有後空間沒有cut

egrep -o '\[wiki:[^]]*]' pages/* | sed 's/\[wiki://;s/]//;s/ .*//' | sort -u 
+0

美麗,這是做到了。唯一的改變是在排序之前添加一個'cut -d''-f1',以防以'[wiki:]'的形式存在鏈接,這個問題我沒有說過,但樣本數據在那裏。謝謝! – tpg2114 2012-08-16 14:52:58

+0

@ tpg2114你可以追加另一個sed命令而不是'cut':''s /。* //''。 – rush 2012-08-16 14:55:39