====== 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 [[sammlung:bash_kommandos|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
* Bei großen Dateien kann grep langsam sein; nutzen Sie [[sammlung:awk|awk]] oder [[sammlung:sed|sed]] für komplexere Verarbeitung
* Farbige Ausgabe mit ''--color=auto'' erleichtert das Lesen
* Alternative Tools: ''egrep'' (veraltet, nutze ''grep -E''), ''fgrep'' (veraltet, nutze ''grep -F'')
* Für sehr große Datenmengen: ''ripgrep'' (rg) als moderne, schnellere Alternative
===== Fehlerbehebung =====
* **"Binary file matches"**: Nutze ''-a'' um Binärdateien als Text zu behandeln oder ''-I'' um sie zu überspringen
* **Zu viele Treffer**: Nutze ''-w'' für ganze Wörter oder präzisere Regex-Muster
* **Keine Treffer trotz vorhandenem Text**: Prüfe Groß-/Kleinschreibung mit ''-i'' oder escape Sonderzeichen
===== Siehe auch =====
* [[sammlung:sed|sed - Stream Editor für Textmanipulation]]
* [[sammlung:awk|awk - Textverarbeitung und Datenextraktion]]
* [[sammlung:find|find - Dateien und Verzeichnisse suchen]]
* [[sammlung:bash_kommandos|Bash Kommandos Übersicht]]
* [[sammlung:journalctl|journalctl - Systemlogs durchsuchen]]
{{tag>linux kommandozeile text suche filter regex logs}}