grep – in Dateien suchen
grep (Global Regular Expression Print) durchsucht Dateien oder stdin nach Zeilen, die ein Muster enthalten, und gibt diese aus.
Grundlegende Verwendung
Abschnitt betitelt „Grundlegende Verwendung“grep "muster" datei.txt # Zeilen mit "muster" ausgebengrep "fehler" /var/log/syslog # im Syslog suchengrep "root" /etc/passwd # Benutzer root in passwdMehrere Dateien und Verzeichnisse
Abschnitt betitelt „Mehrere Dateien und Verzeichnisse“grep "TODO" *.py # in allen .py-Dateiengrep -r "passwort" /etc/ # rekursiv im Verzeichnisgrep -r "error" /var/log/ --include="*.log" # nur in .log-DateienWichtige Optionen
Abschnitt betitelt „Wichtige Optionen“| Option | Bedeutung |
|---|---|
-i | Groß-/Kleinschreibung ignorieren |
-r | Rekursiv in Verzeichnissen suchen |
-n | Zeilennummer ausgeben |
-l | Nur Dateinamen ausgeben (nicht die Treffer) |
-L | Nur Dateinamen ohne Treffer ausgeben |
-v | Invertieren – Zeilen ohne Muster ausgeben |
-c | Anzahl Treffer pro Datei ausgeben |
-w | Nur ganze Wörter treffen |
-A n | n Zeilen nach dem Treffer ausgeben |
-B n | n Zeilen vor dem Treffer ausgeben |
-C n | n Zeilen vor und nach dem Treffer |
grep -in "error" /var/log/syslog # case-insensitiv mit Zeilennummerngrep -r -l "PermitRootLogin" /etc/ # welche Dateien enthalten die Option?grep -v "^#" /etc/ssh/sshd_config # Zeilen ohne Kommentare anzeigengrep -C 3 "failed" /var/log/auth.log # Kontext um Fehlermeldungengrep in Pipelines
Abschnitt betitelt „grep in Pipelines“Als Filter in einer Pipeline ist grep besonders nützlich:
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 Loghistory | grep "ssh" # letzte SSH-Befehle aus der HistorieReguläre Ausdrücke
Abschnitt betitelt „Reguläre Ausdrücke“grep unterstützt reguläre Ausdrücke (Regex). Grundlegende Muster:
| Muster | Bedeutung | Beispiel |
|---|---|---|
. | Beliebiges einzelnes Zeichen | gr.p trifft grep, grap, grip |
* | Vorheriges Zeichen 0 oder mehr mal | go* trifft g, go, goo |
^ | Zeilenanfang | ^root – Zeile beginnt mit “root” |
$ | Zeilenende | sh$ – Zeile endet mit “sh” |
[abc] | Ein Zeichen aus der Menge | [Ff]ehler |
[^abc] | Kein Zeichen aus der Menge | [^#] – nicht # |
grep "^#" /etc/ssh/sshd_config # nur Kommentarzeilengrep "sh$" /etc/passwd # Benutzer mit Shell am Endegrep -E "error|warning|critical" /var/log/syslog # mehrere Muster (extended regex)