2009-03-13 22 views
5

Vorrei ottenere tutte le occorrenze di [0-9A-Z]+? per l'elaborazione successiva. Io hoCome ottenere tutte le partite dalla regex?

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

che mi dà prima partita, ma come ho potuto elaborare tutte le partite nel file?

Grazie

+0

Vuoi aggiungere il? alla fine del modello? – Richard

risposta

5

Se si desidera ottenere solo il testo corrispondente di un'espressione regolare, vorrei utilizzare

grep -o 'regex' file 

Nello spirito del codice vorrei modificarlo in modo da essere

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

Se si desidera abbinare più regex sulla stessa linea, ecco un modo.

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

Presumo che la tua espressione regolare sia un esempio semplificato di ciò che stai facendo davvero. Il ? non è utile e le tue virgolette corrispondono a una stringa letterale.

+0

La regex è leggermente più complessa, +? è necessario essere pigri. Anche se "while ... done

+0

Cosa succede se una riga contiene la corrispondenza di regex due volte? Come posso elaborarlo? –

+0

vedi risposta aggiornata –

Problemi correlati