Grep/Ausgabe
Ausgabe anpassen
Treffer einfärben
Standardmäßig ist die Ausgabe von grep farblos
- Für die Übersichtlichkeit ist es hilfreich, wenn du das gematchte Pattern in jeder Zeile farblich hervorhebst
--color
Hebt Treffer farblich hervor
Per default
--color // bashrc alias?
Ich habe das per Default in meiner .bashrc/.zshrc
- Wenn du dies auch willst, musst du nur die Zeile
export GREP_OPTIONS='--color=auto'
in deiner Shell-Config-File einfügen
- Falls dir die Farbe nicht gefällt, kannst du sie per
export GREP_COLOR='1;32'
nach Belieben ändern
- Für eine andere Farbe einfach einen der Farbcodes in den Hochkommata ersetzen
Black 0;30 Dark Gray 1;30 Blue 0;34 Light Blue 1;34 Green 0;32 Light Green 1;32 Cyan 0;36 Light Cyan 1;36 Red 0;31 Light Red 1;31 Purple 0;35 Light Purple 1;35 Brown 0;33 Yellow 1;33 Light Gray 0;37 White 1;37
Trefferanzahl anzeigen
Die Anzahl aller Zeilen, die das Suchmuster beinhalten, kannst du dir mit -c oder –count ausgeben lassen
- Damit liefert grep die reine Anzahl, also z. B. “4″ für 4 Treffer zurück, sonst nichts
-c
Anzeige der Anzahl Zeilen, in denen das Muster gefunden wurde
$ grep -c bash /etc/passwd 38
Zeilennummer anzeigen
Sinnvoll vor allem bei Sourcecode-Dateien ist die Option -n
- Wenn du dem grep-Befehl diese Option mitgibst, wird vor jedes Match die Zeilennummer des Matches geschrieben
-n
Zeigt die Zeilennummer an, in der das Muster gefunden wurde
$ grep -n root /etc/passwd 1:root:x:0:0:root:/root:/bin/bash
Nur Dateinamen ausgeben lassen
Manchmal braucht man nur den/die Dateinamen, in denen der Suchstring gefunden wurde
- Das kannst du über die Option -l (kleines “L”) erreichen
-l
Nur Anzeige der Namen der Dateien, in denen das Muster gefunden wurde
$ grep -l tcp /etc/host* /etc/hosts.allow /etc/hosts.deny
Dateinamen ohne Treffer
-L
Auch gibt es Anwendungsfälle, in denen du nur die Dateinamen aufgelistet haben willst, in denen der Suchstring NICHT gefunden wurde
- Dafür nutzt du die Option -L
Kontext anzeigen
-A [Anzahl]
Zeigt Anzahl Zeilen an, die der Zeile mit dem Muster folgen
grep -A 2 root /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/bin/bash daemon:x:2:2:daemon:/sbin:/bin/bash
-B [Anzahl]
Zeigt Anzahl Zeilen an, die vor der Zeile mit dem Muster liegen
-C [Anzahl]
Anzahl Zeilen vor- und nach dem Treffer
Ausgabe unterdrücken
-s
Unterdrückt die Fehlerausgaben (Standardfehler); sinnvoll in Skripten
Muster aus Datei laden
Wer komplexer Suchmuster immer wieder verwendet, kann diese in Dateien speichern und im grep-Befehl per -f regexdatei einbinden
Beispiel
alle Zeilen mit Emailadressen aus einer Datei filtern
grep -E '([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})' datei.txt
Den Regular expression ohne die einfachen Anführungsstriche in eine Datei schreiben:
echo '([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})' > \ ~/snippets/regexes/email
Nun kannst du den Regular expression im obigen Beispiel mit dem File ersetzen:
grep -Ef ~/snippets/regexes/email datei.txt
Tipp
Mach es dir zur Gewohnheit, immer alle Regular expressiones, die du verwendest, unter einem aussagekräftigen Dateinamen in einem bestimmten Verzeichnis zu speichern
- So sammelst du mit der Zeit ein komfortables, wiederverwendbares Regular expression-Kompendium