2011-11-20 19 views
9

dizisine dönüşüyor Bash grep sonuçlarımı her satır tutan her bir hücre dizisinde toplamaya çalışıyorum. Ben bu hatbash grep dizisi

wget -O endeksi -E $ CURRENTURL

ve sonra ben dizinin her satırı başına içine 'indeks' dosya sonuçlarını (diğer URL'ler) grep istediğiniz ile URL'ler downloaing ediyorum hücre, Doğru sözdizimi ne olmalıdır?

Dizi = (grep "some expression" index)

??

+0

Doğru, bağlantıları bulmalıyız yer burası mı? bağlantılar nerede olacak? URL'ler için kapsamlı bir Regex oluşturmak zor. – beta0x64

cevap

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

Oh, ve böylece gibiler -v greps birleştirir:

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

teşekkürler, kodumu bununla geliştireceğim, bana yazdığınız ilk kod bloğu ne yapıyor? Böyle bir dizi veya ilk satırdan okuma da diziye koyar? –

+0

Diziye ilk satır çıktıları: http://www.gnu.org/s/bash/manual/html_node/Bash-Builtins.html; Diğer 4 satırda sadece (beyaz boşluk) güvenli bir şekilde dururlar. – sehe

+0

“readarray” ın Bash'e çok yeni bir ek olduğunu unutmayın. Çalıştığım Linux sunucularının, hatta Cygwin ve Mingw kurulumlarının neredeyse hiçbirinde mevcut değildir. Taşınabilir bir çözüm istiyorsanız, aşağıdaki 'Muhtemelen en çok ...' mesajıma bakın. – Blaine

3

Muhtemelen birkaç fakir alternatif arasından en şıksı bir geçici dosya kullanmak olacaktır.

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

Nedenini açıklamak için zamanım yok, ama doğrudan okumaya boru yapmayın.

Hayır Unix kabuğu bu görev için uygun bir araçtır. Perl, Groovy, Java, Python ... birçok dil bu zarif bir şekilde halledebilir, ancak Unix kabuklarından hiçbiri.