2009-03-13 29 views
5

Me gustaría obtener todas las apariciones de [0-9A-Z]+? para su posterior procesamiento. tengo¿Cómo obtener todas las coincidencias de regex?

if [[ `cat file` =~ '[0-9A-Z]+?' ]]; then 
    echo $BASH_REMATCH; 
fi 

Lo que me da primer partido, pero ¿cómo podría procesar todos los partidos en el archivo?

Gracias

+0

¿Quiere agregar el? al final del patrón? – Richard

Respuesta

5

Si desea obtener sólo el texto coincidente de una expresión regular, me gustaría utilizar

grep -o 'regex' file 

En el espíritu de su código me gustaría modificarlo para que sea

while read line; do 
    [[ $line =~ regex ]] || continue 
    # do somethinw with $line or $BASH_REMATCH, perhaps put it in an array. 
done < file 

Si desea hacer coincidir varias expresiones regulares en la misma línea, aquí hay una forma.

while read line; do 
    # do somethinw with $line 
done < <(grep -o 'regex' file) 

Supongo que su expresión regular se supone que es un ejemplo simplificado de lo que realmente está haciendo. Los ? no es útil y sus citas coinciden con una cadena literal.

+0

La expresión regular es un poco más compleja, +? es necesario ser perezoso Aunque el "while ... done

+0

¿Qué pasa si una línea contiene la coincidencia de expresiones regulares dos veces? ¿Cómo puedo procesar eso? –

+0

ver respuesta actualizada –

Cuestiones relacionadas