2011-11-20 115 views
9

在bash中,我試圖在數組中收集我的grep結果,每個單元持有每一行。 我downloaing網址與此線bash grep結果到數組

的wget -O指數-E $ CURRENTURL

,然後我想到grep的「索引」文件的結果(其它URL)的成陣列的每一行每cell, 什麼應該是正確的語法?

陣列=(grep "some expression" index

??

+0

這是你需要找到的聯繫,正確嗎?那麼鏈接將在哪裏?很難爲URL創建一個全面的正則表達式。 – beta0x64

回答

8
readarray GREPPED < <(grep "some expression" index) 
for item in "${GREPPED[@]}" 
do 
    # echo 
    echo "${item}" 
done 

哦,並結合這些-v裏grep像這樣:

egrep -v '\.(jpg|gif|xml|zip|asp|php|pdf|rar|cgi|html?)' 
+0

謝謝,我會改善我的代碼,你寫我的第一塊代碼做什麼?從這樣的數組或第一行讀取數組還是放到數組中? –

+0

第一行輸出到數組:http://www.gnu.org/s/bash/manual/html_node/Bash-Builtins.html;其他4行僅演示如何(空白安全地)遍歷它們 – sehe

+0

請注意,'readarray'是Bash的一個非常新的附加。它幾乎不在任何Linux服務器上,甚至在我工作的Cygwin和Mingw安裝中都可用。如果您需要便攜式解決方案,請參閱下面我的'可能最多...'的帖子。 – Blaine

3

可能最優雅的幾個不好的選擇之一是使用臨時文件。

wget $blah | grep 'whatever' > $TMPFILE 
declare -a arr 
declare -i i=0 
while read; do 
    arr[$i]="$REPLY" 
    ((i = i + 1)) 
done < $TMPFILE 

我沒有時間解釋爲什麼,但不要直接讀入。

沒有Unix shell是適合此任務的合適工具。 Perl,Groovy,Java,Python ......許多語言可以很好地處理這個問題,但沒有一個是Unix shell。