sammlung:grep
Inhaltsverzeichnis
grep
grep (Global Regular Expression Print) ist ein mächtiges Kommandozeilenwerkzeug zum Durchsuchen von Text nach Mustern. Es wird verwendet, um Dateien oder Ausgaben nach bestimmten Zeichenketten oder regulären Ausdrücken zu filtern und ist unverzichtbar für Log-Analyse, Fehlersuche und Textverarbeitung.
Voraussetzungen
- Zugriff auf die Linux-Kommandozeile
- Grundkenntnisse in Bash-Kommandos
- Optional: Verständnis für reguläre Ausdrücke
Grundlegende Syntax
grep [OPTIONEN] MUSTER [DATEI...]
Häufige Anwendungsfälle
Einfache Textsuche
# In einer Datei suchen grep "Suchbegriff" datei.txt # In mehreren Dateien suchen grep "error" *.log # Rekursiv in Verzeichnissen suchen grep -r "TODO" /pfad/zum/verzeichnis/
Groß-/Kleinschreibung ignorieren
grep -i "fehler" system.log
Nur Dateinamen anzeigen
grep -l "pattern" *.txt
Zeilennummern anzeigen
grep -n "function" script.sh
Invertierte Suche (Zeilen OHNE Muster)
grep -v "DEBUG" application.log
Anzahl der Treffer
grep -c "ERROR" logfile.txt
Kontext anzeigen
# 3 Zeilen vor und nach dem Treffer grep -C 3 "Exception" error.log # Nur 2 Zeilen danach grep -A 2 "pattern" datei.txt # Nur 2 Zeilen davor grep -B 2 "pattern" datei.txt
Reguläre Ausdrücke
Erweiterte reguläre Ausdrücke (ERE)
# -E für erweiterte Regex grep -E "error|warning|critical" system.log # Zeilenanfang und -ende grep "^Start" datei.txt # Beginnt mit "Start" grep "Ende$" datei.txt # Endet mit "Ende" # Beliebiges Zeichen grep "f.o" datei.txt # foo, fao, f1o, etc. # Wiederholungen grep -E "lo{2,4}" datei.txt #loo, looo, loooo
Zeichenklassen
# Zahlen finden grep "[0-9]" datei.txt # Buchstaben finden grep "[a-zA-Z]" datei.txt # IP-Adressen finden grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" network.log
Kombination mit Pipes
# Prozesse filtern ps aux | grep apache # Logdateien live überwachen tail -f /var/log/syslog | grep "error" # Mehrfaches Filtern cat datei.txt | grep "wichtig" | grep -v "unwichtig"
Nützliche Optionen im Überblick
| Option | Bedeutung |
|---|---|
| -i | Groß-/Kleinschreibung ignorieren (case insensitive) |
| -r, -R | Rekursiv in Verzeichnissen suchen |
| -n | Zeilennummern anzeigen |
| -v | Invertierte Suche (Zeilen ohne Muster) |
| -l | Nur Dateinamen mit Treffern ausgeben |
| -c | Anzahl der Treffer zählen |
| -w | Nur ganze Wörter suchen |
| -x | Nur ganze Zeilen suchen |
| -A NUM | NUM Zeilen nach Treffer anzeigen (After) |
| -B NUM | NUM Zeilen vor Treffer anzeigen (Before) |
| -C NUM | NUM Zeilen vor und nach Treffer (Context) |
| -E | Erweiterte reguläre Ausdrücke verwenden |
| –color | Treffer farbig hervorheben |
Praktische Beispiele
Logs analysieren
# Alle ERROR-Meldungen der letzten Stunde grep "ERROR" /var/log/syslog | tail -100 # Fehlgeschlagene SSH-Login-Versuche grep "Failed password" /var/log/auth.log # Alle einzigartigen IP-Adressen in Access-Log grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" access.log | sort -u
Konfigurationsdateien durchsuchen
# Alle nicht-kommentierten Zeilen grep -v "^#" /etc/ssh/sshd_config | grep -v "^$" # Bestimmte Einstellung finden grep -r "PermitRootLogin" /etc/ssh/
Code-Analyse
# Alle TODO-Kommentare finden grep -rn "TODO" /pfad/zum/projekt/ # Funktionsdefinitionen finden grep -E "^function |^def " *.py
Hinweise
- grep gibt einen Exit-Code zurück: 0 = Treffer gefunden, 1 = keine Treffer, 2 = Fehler
- Farbige Ausgabe mit
–color=autoerleichtert das Lesen - Alternative Tools:
egrep(veraltet, nutzegrep -E),fgrep(veraltet, nutzegrep -F) - Für sehr große Datenmengen:
ripgrep(rg) als moderne, schnellere Alternative
Fehlerbehebung
- „Binary file matches“: Nutze
-aum Binärdateien als Text zu behandeln oder-Ium sie zu überspringen - Zu viele Treffer: Nutze
-wfür ganze Wörter oder präzisere Regex-Muster - Keine Treffer trotz vorhandenem Text: Prüfe Groß-/Kleinschreibung mit
-ioder escape Sonderzeichen
Siehe auch
sammlung/grep.txt · Zuletzt geändert: von 127.0.0.1
