2016-08-18 4 views
0

gegeben und ich habe eine große Datei wie folgt aussehen extrahieren mag:Regulärer Ausdruck grep

..... 
G: Quantity 000001, removing 4 binary files 
A: some stuff 
..... 
G: some other stuff 
G: some infos 
..... 
G: Quantity 000002, removing 1 binary files 
.... 
A: some data 
.... 
G: Quantity 000003, removing 41 binary files 
..... 

alle Linien „G: Menge ??????, * binäre Dateien zu entfernen“.

Ich schreibe dieses Muster mit der Bash-Syntax, da es mir vertraut ist, aber Grep interpretiert meine Fragezeichen und das Sternchen nicht als Bash. Was ist die entsprechende Grep-Syntax?

Die folgende Syntax funktioniert:

grep "G:" filename | grep Quantity | grep removing 

aber es verwendet keine regex.

+0

'cat grep.txt | grep -e^G. * binary \ files $ 'so etwas? –

+0

Mit "Bash-Syntax" meinst du wahrscheinlich "Globbing-Muster", das trotz einiger Ähnlichkeiten im Zweck KEINE Regexp ist. google 'regexp tutorial' und nimm es. –

Antwort

2

In Regex ist die Verwendung von . die beste Möglichkeit, ein beliebiges Zeichen zu finden.

Wenn Sie genau N-mal jedes Zeichen übereinstimmen möchten, sagen Sie .{N}. Wenn Sie mindestens eine Übereinstimmung wünschen, sagen Sie .+. Da dieser Fall, in dem Sie Ziffern übereinstimmen soll, kann es am besten sein, zu sagen [0-9] anstelle eines zu allgemein .:

grep -E 'G: Quantity [0-9]{6}, removing [0-9]+ binary files' file 

Dieser Befehl gibt:

G: Quantity 000001, removing 4 binary files 
G: Quantity 000002, removing 1 binary files 
G: Quantity 000003, removing 41 binary files