Der Befehl grep durchsucht Dateien nach Textmustern und gibt alle Zeilen aus, die das gesuchte Muster enthalten. Der Name steht für “global regular expression print” und beschreibt genau das: globale Suche mit regulären Ausdrücken.
Syntax
grep [OPTIONEN] MUSTER [DATEI...]
OPTIONEN- Flags, die das Suchverhalten steuernMUSTER- Der Suchbegriff oder reguläre AusdruckDATEI- Eine oder mehrere Dateien, die durchsucht werden sollen
Ohne Dateiangabe liest grep von der Standardeingabe. Das ermöglicht die Verwendung in Pipes mit anderen Befehlen.
Einfache Textsuche
Die grundlegendste Anwendung ist die Suche nach einer Zeichenkette in einer Datei:
grep bash /etc/passwd
Der Befehl gibt alle Zeilen aus, die “bash” enthalten:
root:x:0:0:root:/root:/bin/bash
max:x:1000:1000:Max:/home/max:/bin/bash
Bei Suchbegriffen mit Leerzeichen verwendest du Anführungszeichen:
grep "Display Manager" /etc/passwd
Groß- und Kleinschreibung ignorieren
Standardmäßig unterscheidet grep zwischen Groß- und Kleinschreibung. Mit der Option -i wird diese Unterscheidung aufgehoben:
grep -i fehler /var/log/syslog
Dieser Befehl findet “Fehler”, “FEHLER”, “fehler” und alle anderen Schreibweisen.
Suche invertieren
Mit der Option -v zeigt grep alle Zeilen an, die das Muster nicht enthalten:
grep -v nologin /etc/passwd
Das ist praktisch, um bestimmte Einträge aus einer Liste auszuschließen.
Rekursive Suche in Verzeichnissen
Mit -r durchsucht grep alle Dateien in einem Verzeichnis und dessen Unterverzeichnissen:
grep -r "server_name" /etc/nginx/
Die Ausgabe enthält den Dateipfad vor jeder Fundstelle:
/etc/nginx/sites-available/example.conf: server_name example.org;
Die Option -R funktioniert ähnlich, folgt aber auch symbolischen Links.
Nur Dateinamen anzeigen
Wenn dich nur interessiert, welche Dateien das Muster enthalten, verwende -l:
grep -l "TODO" *.py
Der Befehl listet alle Python-Dateien im aktuellen Verzeichnis auf, die “TODO” enthalten. In Kombination mit -r durchsuchst du ganze Projektverzeichnisse:
grep -rl "deprecated" /home/max/projekt/
Zeilennummern anzeigen
Mit -n zeigt grep die Zeilennummer vor jedem Treffer:
grep -n "error" /var/log/nginx/error.log
Ausgabe:
142:2025/01/15 10:23:45 [error] connection refused
289:2025/01/15 11:45:12 [error] upstream timeout
Treffer zählen
Die Option -c gibt nur die Anzahl der übereinstimmenden Zeilen aus:
grep -c "failed" /var/log/auth.log
Das ist nützlich für schnelle Statistiken oder zur Verwendung in Skripten.
Ganze Wörter suchen
Ohne weitere Optionen findet grep auch Teilübereinstimmungen. Die Suche nach “log” findet auch “login”, “catalog” oder “logout”. Mit -w werden nur ganze Wörter gefunden:
grep -w "log" datei.txt
Kontext anzeigen
Manchmal brauchst du mehr als nur die Trefferzeile. Die Optionen -A, -B und -C zeigen Kontext:
-A 3zeigt 3 Zeilen nach dem Treffer (After)-B 3zeigt 3 Zeilen vor dem Treffer (Before)-C 3zeigt 3 Zeilen vor und nach dem Treffer (Context)
grep -C 2 "Exception" /var/log/app.log
Mehrere Muster suchen
Mit -E aktivierst du erweiterte reguläre Ausdrücke. Der Pipe-Operator | verbindet mehrere Muster mit ODER:
grep -E "error|warning|critical" /var/log/syslog
Alternativ kannst du mehrere -e Optionen verwenden:
grep -e "error" -e "warning" /var/log/syslog
Ausgabe anderer Befehle filtern
Eine häufige Anwendung ist das Filtern von Befehlsausgaben durch Pipes:
ps aux | grep nginx
Dieser Befehl zeigt alle laufenden Prozesse, die “nginx” im Namen haben. Ein kleiner Haken: Der grep-Prozess selbst taucht oft in der Ausgabe auf. Das lässt sich umgehen:
ps aux | grep nginx | grep -v grep
Oder eleganter mit einem Zeichenklassen-Trick:
ps aux | grep "[n]ginx"
Reguläre Ausdrücke
grep unterstützt reguläre Ausdrücke für komplexe Suchmuster:
| Zeichen | Bedeutung |
|---|---|
^ | Zeilenanfang |
$ | Zeilenende |
. | Ein beliebiges Zeichen |
* | Null oder mehr Wiederholungen |
[abc] | Eines der Zeichen a, b oder c |
[^abc] | Keines der Zeichen a, b oder c |
Zeilen finden, die mit “Error” beginnen:
grep "^Error" logdatei.txt
Zeilen finden, die mit einem Punkt enden:
grep "\.$" datei.txt
Der Backslash entwertet die besondere Bedeutung des Punktes.
Verwendung in Skripten
Mit der Option -q (quiet) unterdrückt grep jede Ausgabe und liefert nur einen Rückgabewert. Das ist ideal für Bedingungen in Skripten:
if grep -q "FEHLER" /var/log/app.log; then
echo "Fehler gefunden"
else
echo "Keine Fehler"
fi
Der Rückgabewert ist 0 bei mindestens einem Treffer und 1 ohne Treffer.
Häufig verwendete Optionen
| Option | Bedeutung |
|---|---|
-i | Groß-/Kleinschreibung ignorieren |
-v | Zeilen ohne Treffer anzeigen |
-r | Rekursiv in Verzeichnissen suchen |
-l | Nur Dateinamen ausgeben |
-n | Zeilennummern anzeigen |
-c | Treffer zählen |
-w | Nur ganze Wörter |
-E | Erweiterte reguläre Ausdrücke |
-o | Nur den Treffer selbst ausgeben |
-A n | n Zeilen nach dem Treffer |
-B n | n Zeilen vor dem Treffer |
Zusammenfassung
Der Befehl grep ist ein vielseitiges Werkzeug zum Durchsuchen von Dateien und Filtern von Ausgaben. Mit regulären Ausdrücken lassen sich auch komplexe Suchmuster formulieren. In Kombination mit anderen Befehlen über Pipes gehört grep zu den meistgenutzten Werkzeugen auf der Kommandozeile.