grep
ist ein sehr nützliches Tool in unixoiden Betriebssystemen, um Zeichenketten in Dateien oder Datenströmen zu suchen und zu filtern. grep
Filter können kaskadiert werden und besitzen einen umfangreichen Parametersatz zum Anpassen der Filter.
Beispiele
Folgender Aufruf ist der einfachst Denkbare und sucht in der angegebenen Datei nach dem String PATTERN
:
$ grep PATTERN /var/log/systemlog
Folgender Aufruf sucht in der angegebenen Datei nach dem String Pattern
und filtert diesen aus der Ausgabe von less heraus (-v
):
$ grep -v PATTERN /var/log/systemlog
Diese beiden Filter können auch kombiniert werden. Folgender Aufruf sucht in der angegebenen Datei den String PATTERN_1
und leitet die Ausgabe (Pipe) in die Standardeingabe eines weiteren Filters und filtert den String PATTERN_2
heraus:
$ grep PATTERN_1 /var/log/systemlog | grep -v PATTERN_2
Wenn in der Ausgabe mehrere Strings gesucht werden sollen, kann grep mit dem Parameter -E
angewiesen werden den Suchstring als Regulären Ausdruck zu interpretieren. Das Pipe Symbol |
ist dann der UND
-Operator. Folgender Aufruf sucht in der angegebenen Datei nach den Strings PATTERN_1
, PATTERN_2
und PATTERN_3
:
$ grep -E 'PATTERN_1|PATTERN_2|PATTERN_3' /var/log/systemlog
Mit dem veraltetem Kommando egrep
kann mit folgender Syntax das gleiche Ergebnis erzielt werden:
$ egrep 'PATTERN_1|PATTERN_2|PATTERN_3' /var/log/systemlog
Besonders herausfordern sind Zeichenfolgen, welche Steuerzeichen enthalten, diese aber nicht als solche interpretiert werden sollen. Mit fgrep
oder grep -F
kann man die Suche so einschränken, dass Steuerzeichen wie zB $, *, [, |, (, )
und \
ihre eigentliche Bedeutung behalten und nicht als Bestandteil der Syntax eines Regulären Ausdrucks. Da solche Zeichen auch in der Shell eine besondere Bedeutung haben, muss der gesamte Suchstring in einfache Hochkommas eingeschlossen werden '...'
:
$ grep -F 'C:\logs\SUCHSTRING' *
Zu beachten ist, dass somit im gesuchten String keine Wildcards wie zB ein Asterisk *
nicht mehr möglich ist.
Von Standarteingabe lesen
Die Ausgabe eines anderen Programms kann auch als Standardeingabe in grep gepipt werden. Auch hier können mehrere Filter kombiniert werden:
$ less /var/log/systemlog | grep PATTERN
$ less /var/log/systemlog | grep PATTERN_1 | grep -v PATTERN_2
Such-String farbig hervorheben
Gerade bei der Suche in großen Datenmengen und mit mehreren kombinierten Suchpattern kann die Ausgabe schnell unübersichtlich werden. Abhilfe schafft hier das farbige highlighten der Such-Strings --color
:
$ grep --color -E 'PATTERN_1|PATTERN_2|PATTERN_3' /var/log/systemlog
Soll das farbige highlighten durch eine gepipte Ausgabe erhalten werden, kann das mit --color=always
angewiesen werden:
$ grep --color=always PATTERN_1 /var/log/systemlog | grep -v PATTERN_2