Zum Inhalt springen

grep – in Dateien suchen

grep (Global Regular Expression Print) durchsucht Dateien oder stdin nach Zeilen, die ein Muster enthalten, und gibt diese aus.

Terminal-Fenster
grep "muster" datei.txt # Zeilen mit "muster" ausgeben
grep "fehler" /var/log/syslog # im Syslog suchen
grep "root" /etc/passwd # Benutzer root in passwd
Terminal-Fenster
grep "TODO" *.py # in allen .py-Dateien
grep -r "passwort" /etc/ # rekursiv im Verzeichnis
grep -r "error" /var/log/ --include="*.log" # nur in .log-Dateien
OptionBedeutung
-iGroß-/Kleinschreibung ignorieren
-rRekursiv in Verzeichnissen suchen
-nZeilennummer ausgeben
-lNur Dateinamen ausgeben (nicht die Treffer)
-LNur Dateinamen ohne Treffer ausgeben
-vInvertieren – Zeilen ohne Muster ausgeben
-cAnzahl Treffer pro Datei ausgeben
-wNur ganze Wörter treffen
-A nn Zeilen nach dem Treffer ausgeben
-B nn Zeilen vor dem Treffer ausgeben
-C nn Zeilen vor und nach dem Treffer
Terminal-Fenster
grep -in "error" /var/log/syslog # case-insensitiv mit Zeilennummern
grep -r -l "PermitRootLogin" /etc/ # welche Dateien enthalten die Option?
grep -v "^#" /etc/ssh/sshd_config # Zeilen ohne Kommentare anzeigen
grep -C 3 "failed" /var/log/auth.log # Kontext um Fehlermeldungen

Als Filter in einer Pipeline ist grep besonders nützlich:

Terminal-Fenster
ls -la /etc | grep "^d" # nur Verzeichnisse (Zeilen mit d am Anfang)
ps aux | grep nginx # läuft nginx?
cat access.log | grep "404" | wc -l # Anzahl 404-Fehler im Log
history | grep "ssh" # letzte SSH-Befehle aus der Historie

grep unterstützt reguläre Ausdrücke (Regex). Grundlegende Muster:

MusterBedeutungBeispiel
.Beliebiges einzelnes Zeichengr.p trifft grep, grap, grip
*Vorheriges Zeichen 0 oder mehr malgo* trifft g, go, goo
^Zeilenanfang^root – Zeile beginnt mit “root”
$Zeilenendesh$ – Zeile endet mit “sh”
[abc]Ein Zeichen aus der Menge[Ff]ehler
[^abc]Kein Zeichen aus der Menge[^#] – nicht #
Terminal-Fenster
grep "^#" /etc/ssh/sshd_config # nur Kommentarzeilen
grep "sh$" /etc/passwd # Benutzer mit Shell am Ende
grep -E "error|warning|critical" /var/log/syslog # mehrere Muster (extended regex)