2011-11-20 21 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.

Cuestiones relacionadas