Zum Inhalt springen

Grep/Ausgabe

Aus Foxwiki
Die 5 zuletzt angesehenen Seiten:  GRUB 2 » 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