2011-11-20 13 views
9

W bash Próbuję zebrać moje wyniki grep w tablicy, każda komórka trzymająca każdą linię. mam downloaing adresów URL z tej liniibash grep wyniki w tablicy

wget -O Indeks -E $ CURRENTURL

a następnie chcę grep „Wskaźnik” wyniki plików (inne adresy URL) do każdej linii na tablicy komórka, jaka powinna być poprawna składnia?

Tablica = (grep "some expression" index)

??

+0

To jest, gdy trzeba znaleźć linki, prawda? więc gdzie będą linki? Trudno jest stworzyć kompleksowy Regex dla adresów URL. – beta0x64

Odpowiedz

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

Aha, i połączyć te -v greps tak:

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

dzięki, poprawię mój kod za pomocą tego, pierwszego bloku kodu, który napisałeś do mnie co robisz? Czytanie z takiej tablicy lub pierwszej linii również stawia tablicę? –

+0

Pierwszy wiersz wyjściowy do tablicy: http://www.gnu.org/s/bash/manual/html_node/Bash-Builtins.html; Pozostałe 4 linie po prostu demonstrują, jak (whitespace-safe) iterować nad nimi – sehe

+0

Należy zauważyć, że "readarray" jest bardzo nowym dodatkiem do Bash. Jest dostępny na prawie każdym serwerze Linux, a nawet w instalacjach Cygwin i Mingw, w których pracuję. Jeśli chcesz przenośne rozwiązanie, zobacz mój "Prawdopodobnie najbardziej ..." poniżej. – Blaine

3

Prawdopodobnie najbardziej eleganckim z wielu ubogich alternatyw byłoby użycie pliku tymczasowego.

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

Nie mam czasu, aby wyjaśnić, dlaczego, ale nie rura bezpośrednio do odczytu.

Żadna powłoka Uniksa nie jest odpowiednim narzędziem do tego zadania. Perl, Groovy, Java, Python ... wiele języków poradzi sobie z tym elegancko, ale żadna z powłok Uniksa.

Powiązane problemy