2011-11-20 14 views
9

In bash Estoy tratando de recoger mis resultados grep en matriz, cada celda que contiene cada línea. estoy downloaing URL con esta líneabash grep resultados en la matriz

wget -O índice -E $ CURRENTURL

y luego quiero grep los resultados del archivo de índice '' (otras direcciones URL) en una matriz por cada línea cell, ¿cuál debería ser la sintaxis correcta?

Array = (grep "some expression" index)

??

+0

Aquí es donde es necesario encontrar los enlaces, correcto? Entonces, ¿dónde estarán los enlaces? Es difícil crear un Regex completo para las URL. – beta0x64

Respuesta

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

Ah, y combinar esos -v greps así:

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

gracias, mejoraré mi código con eso, ¿el primer bloque de código que me escribió haciendo qué? ¿leer de tal matriz o la primera línea también pone a disposición? –

+0

La primera línea muestra en matriz: http://www.gnu.org/s/bash/manual/html_node/Bash-Builtins.html; Las otras 4 líneas solo muestran cómo (espacio en blanco con seguridad) iterar sobre ellas – sehe

+0

Tenga en cuenta que 'readarray' es una adición muy nueva a Bash. Está disponible en casi ninguno de los servidores Linux, o incluso en las instalaciones de Cygwin y Mingw donde trabajo. Si desea una solución portátil, consulte mi publicación 'Probablemente más ...' a continuación. – Blaine

3

Probablemente lo más elegante entre varias alternativas pobres sería usar un archivo temporal.

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

No tengo tiempo para explicar por qué, pero no conecto directamente a la lectura.

Ningún shell Unix es una herramienta adecuada para esta tarea. Perl, Groovy, Java, Python ... muchos idiomas podrían manejar esto de manera elegante, pero ninguno de los shells de Unix.