====== 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}}