====== grep | Muster in Dateien und Ausgaben suchen ====== Das Kommando grep (Global Regular Expression Print) wird verwendet, um Textmuster in Dateien oder der Standardausgabe zu durchsuchen.\\ Es unterstützt einfache Zeichenfolgen, reguläre Ausdrücke und kann sogar rekursiv in Verzeichnissen suchen.\\ \\ ==== Grundlegende Syntax ==== grep [OPTIONEN] "MUSTER" DATEI MUSTER: Das zu suchende Wort oder der reguläre Ausdruck. DATEI: Die Datei(en), in denen gesucht wird. Falls keine Datei angegeben wird, liest grep aus der Standardeingabe (stdin). \\ **Beispiel:**\\ Sucht nach dem Wort „Fehler“ in logfile.txt. grep "Fehler" logfile.txt \\ ==== Wichtige Optionen ==== |**Option**|**Beschreibung**| |-i|Ignoriert Groß- und Kleinschreibung| |-v|Zeigt alle Zeilen, die nicht das Muster enthalten| |-r|Durchsucht alle Dateien in einem Verzeichnis rekursiv| |-c|Gibt die Anzahl der Treffer (Zeilen) aus| |-n|Zeigt die Zeilennummern der Treffer an| |-l|Zeigt nur die Namen der Dateien an, die das Muster enthalten| |-o|Gibt nur den gefundenen Text aus (nicht die ganze Zeile)| |-w|Sucht nach exakten Wortübereinstimmungen| |-A N|Zeigt N Zeilen nach dem Treffer an| |-B N|Zeigt N Zeilen vor dem Treffer an| |-C N|Zeigt N Zeilen vor und nach dem Treffer an| |--color=auto|Hebt Treffer farbig hervor| \\ ==== Beispiele zur Nutzung von grep ==== \\ === Einfache Suche === Sucht nach „root“ in der Datei /etc/passwd.\\ grep "root" /etc/passwd \\ === Groß-/Kleinschreibung ignorieren (-i) === Findet „error“, „ERROR“, „Error“ usw.\\ grep -i "error" logfile.txt \\ === mgekehrte Suche (-v) === Zeigt alle Zeilen, die nicht „192.168.1.1“ enthalten.\\ grep -v "192.168.1.1" access.log \\ === Rekursive Suche in Verzeichnissen (-r) === Durchsucht alle Dateien in /home/user/projekt nach „TODO“.\\ grep -r "TODO" /home/user/projekt \\ === Anzahl der Treffer (-c) === Gibt nur die Anzahl der Treffer aus.\\ grep -c "error" logfile.txt \\ === Zeilennummern anzeigen (-n) === Gibt Zeilennummern aus, wo „MainFunction“ in code.c steht.\\ grep -n "MainFunction" code.c \\ === Nur Dateinamen mit Treffern anzeigen (-l) === Zeigt nur die Namen der Dateien, die „password“ enthalten.\\ grep -l "password" *.txt \\ === Nur das gefundene Wort anzeigen (-o) === Gibt nur die gefundenen Warncodes aus (WARN123, WARN456…).\\ grep -o "WARN[0-9]*" logfile.txt \\ === Ganze Wörter suchen (-w) === Findet „is“, aber nicht „this“ oder „his“.\\ grep -w "is" text.txt \\ === Kontext um Treffer anzeigen (-A, -B, -C) === Zeigt die Zeile mit „ERROR“ und die 3 Zeilen danach.\\ grep -A 3 "ERROR" logfile.txt \\ Zeigt die Zeile mit „Login failed“ und die **2 Zeilen davor**.\\ grep -B 2 "Login failed" auth.log system.log /code> \\ Zeigt die Treffer plus **2 Zeilen davor und danach**. grep -C 2 "Critical" \\ ==== Reguläre Ausdrücke mit grep -E (Erweiterte Suche) ==== \\ Die -E Option erlaubt erweiterte reguläre Ausdrücke (entspricht egrep).\\ |**Regulärer Ausdruck**|**Bedeutung**| |.|Beliebiges Zeichen (außer Zeilenumbruch)| |%%^%%|Beginn einer Zeile| |$|Ende einer Zeile| |[abc]|Entweder „a“, „b“ oder „c“| |[a-z]|Ein Kleinbuchstabe von „a“ bis „z“| |%%[^0-9]%%|Kein Ziffernzeichen (0-9)| |*|0 oder mehr Vorkommen des vorherigen Zeichens| |+|1 oder mehr Vorkommen des vorherigen Zeichens| |?|0 oder 1 Vorkommen| |{n,m}|Zwischen n und m Wiederholungen| |foo\bar|Findet „foo“ oder „bar“| \\ === Beispiele für reguläre Ausdrücke === Sucht nach Zeilen, die mit „user“ + **2 Ziffern** beginnen (`user01`, `user99`). \\ grep -E "^user[0-9]{2}" datei.txt \\ Findet Zeilen mit „error“, „fail“ oder „fatal“. \\ grep -E "error|fail|fatal" logfile.txt \\ Findet Muster wie `ABC1234`, `XYZ5678`. \\ grep -E "[A-Z]{3}[0-9]{4}" data.txt \\ ====grep mit Pipes (|) kombinieren ==== grep wird oft mit anderen Kommandos kombiniert.\\ \\ === ps und grep: Laufende Prozesse filtern === Zeigt nur Firefox-Prozesse. \\ ps aux | grep "firefox" \\ === ls und grep: Dateien filtern === Zeigt nur Shell-Skripte (.sh am Ende). \\ ls -l | grep ".sh$" === dmesg und grep: Kernel-Logs durchsuchen === \\ Zeigt nur USB-bezogene Meldungen. \\ dmesg | grep -i "usb"