2009-03-13 11 views
5

Ich möchte alle Vorkommen von [0-9A-Z]+? zur späteren Verarbeitung erhalten. Ich habe tunWie bekomme ich alle Treffer von Regex?

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

Was mir erstes Spiel gibt, aber wie kann ich alle Spiele in der Datei bearbeiten?

Danke

+0

Wollen Sie das hinzufügen? am Ende des Musters? – Richard

Antwort

5

Wenn Sie nur den angepassten Text eines regulären Ausdrucks erhalten möchten, würde ich

grep -o 'regex' file 

Im Geiste des Codes verwende ich es ändern würde

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

Wenn Sie mehrere Regexes auf der gleichen Linie übereinstimmen möchten, hier ist ein Weg.

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

Ich nehme an, dass Ihre Regex ein vereinfachtes Beispiel dafür sein soll, was Sie wirklich tun. Das ? ist nicht hilfreich und Ihre Zitate entsprechen einer Literal-Zeichenfolge.

+0

Die Regex ist etwas komplexer, +? ist notwendig, um faul zu sein. Obwohl die "while ... done

+0

Was passiert, wenn eine Zeile die Regex-Übereinstimmung zweimal enthält? Wie kann ich das verarbeiten? –

+0

siehe aktualisierte Antwort –

Verwandte Themen