Der Befehl „grep“ gibt jene Zeilen einer Datei oder der Ausgabe eines anderen Befehls aus, in denen der gesuchte Text vorkommt. Bei der Analyse von Protokolldateien reicht der Treffer allein jedoch oft nicht aus: Die Zeilen vor und nach einem PHP-Fehler oder einem fehlgeschlagenen Anmeldeversuch zeigen, was zu dem Fehler geführt hat und was danach geschah. Hierfür dienen die Kontext-Schalter.
Einfache Suche
grep 'valami' /path/to/file.log
Zeilen vor dem Suchergebnis: -B
Die nach dem Schalter „-B“ (before) angegebene Anzahl von Zeilen wird auch vor dem Suchergebnis ausgegeben:
grep -B 5 'valami' /path/to/file.log
Hier werden vor jedem Suchergebnis 5 Zeilen angezeigt.
Zeilen nach dem Suchergebnis: -A
Der Schalter „-A“ (after) gibt die Zeilen nach dem Suchtreffer aus:
grep -A 3 'valami' /path/to/file.log
Hier werden nach jedem Suchergebnis drei Zeilen angezeigt. Dies ist beispielsweise bei mehrzeiligen Fehlermeldungen (Stack Trace) hilfreich, bei denen sich der wesentliche Inhalt unterhalb der Fehlerzeile befindet.
Zeilen auf beiden Seiten: -C
Wenn Sie vor und nach dem Suchergebnis jeweils die gleiche Anzahl an Zeilen benötigen, verwenden Sie den Schalter -C (Kontext):
grep -C 2 'valami' /path/to/file.log
Für eine unterschiedliche Anzahl von Zeilen können beide Optionen auch zusammen verwendet werden: Der Befehl „grep -B 5 -A 2 'valami' fajl.log“ gibt die 5 Zeilen vor dem Treffer und die 2 Zeilen danach aus.
Wenn mehrere Treffer nebeneinander liegen, fasst grep sie zu einem einzigen Block zusammen und trennt einzelne Blöcke durch eine Zeile mit „--“. In einer 30-zeiligen Testdatei lieferte der Befehl „grep -n -C 2“ für die Treffer in den Zeilen 10, 13 und 25 folgendes Ergebnis (nach der Zeilennummer kennzeichnet „:“ den Treffer, „-“ die umgebende Zeile):
8-sor 8
9-sor 9
10:sor 10 HIBA
11-sor 11
12-sor 12
13:sor 13 HIBA
14-sor 14
15-sor 15
--
23-sor 23
24-sor 24
25:sor 25 HIBA
26-sor 26
27-sor 27
Hervorhebung und weitere nützliche Links
--color=auto: Hebt das Suchergebnis in der Ausgabe hervor (die Schreibweise--colourfunktioniert ebenfalls). In vielen Distributionen ist diese Option standardmäßig aktiviert.-n: Gibt die Anzahl der Zeilen aus, sodass Sie die Stelle in der Datei leicht finden können.-i: Es wird nicht zwischen Groß- und Kleinschreibung unterschieden.-r: Durchsucht einen Ordner und dessen Unterordner rekursiv.-v: Gibt die nicht übereinstimmenden Zeilen aus.-E: Verwendet einen erweiterten regulären Ausdruck, zum Beispielgrep -E 'error|warning'.
Ein vollständiges Beispiel für eine Suche nach einer Nummer, einer Hervorhebung sowie den 5 Zeilen vor und den 2 Zeilen nach dem Suchtreffer:
grep -n --color=auto -B 5 -A 2 'Fatal error' /var/www/oldal/error_log
Praxisbeispiele
# Egy IP-cím kérései az Apache naplójában, a környező sorokkal
grep -C 3 '203.0.113.25' /var/log/httpd/access_log
# Sikertelen SSH-bejelentkezések AlmaLinux/Rocky Linux alatt
grep -B 2 'Failed password' /var/log/secure
# Egy szolgáltatás naplója systemd alatt, a grep-pel szűrve
journalctl -u nginx --no-pager | grep -A 5 'error'
# Régi, elforgatott naplókban keresés (tömörített és tömörítetlen fájlokban is)
zgrep -C 3 'valami' /var/log/messages-*
Unter AlmaLinux und Rocky Linux komprimiert logrotate standardmäßig nicht (#compress in der Datei /etc/logrotate.conf): Die alten Protokolldateien haben das Format „messages-20261020“ und sind unkomprimiert, weshalb eine Suche nach dem Muster *.gz keine Treffer liefern würde. Unter Debian und Ubuntu haben die rotierten Protokolldateien in der Regel die Erweiterung .gz. zgrep sucht in beiden Dateitypen; im Test hat es die Zeilen sowohl in einer unkomprimierten als auch in einer .gz-Datei gefunden.
Unter Debian und Ubuntu befinden sich die Apache-Protokolle im Verzeichnis /var/log/apache2/, das Authentifizierungsprotokoll in der Datei /var/log/auth.log. Informationen zum Speicherort und zum Auslesen der Protokolldateien finden Sie in unserem Artikel zu „journalctl“ und „/var/log“, während die Handhabung von zu groß gewordenen Fehlerprotokollen in der Anleitung zum Auffinden und Löschen großer „error_log“-Dateien behandelt wird.