2011-11-20 9 views
9

bashで、各行を保持している各セルに配列のgrep結果を収集しようとしています。 私はこのラインでURLをdownloaingbash grep results into array

のwget -Oインデックス-E $ CURRENTURL

、その後、私は、各行ごとに配列に「インデックス」ファイルの結果(他のURL)をgrep検索したいですよセル、 正しい構文は何ですか?

アレイ=(grep "some expression" index

+0

をあなたは正しい、リンクを見つける必要がある場所ですか?リンクはどこにありますか? URL用の包括的なRegexを作成するのは難しいです。 – 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シェルは適切なツールではありません。 Perl、Groovy、Java、Python ...多くの言語がこれをうまく扱うことができますが、Unixシェルのどれも扱うことはできません。