Dateien mit grep nach Begriffen filtern

Der Befehl grep durchsucht Textdateien nach einem vorbestimmten Suchbegriff. Als Resultat zeigt grep alle Zeilen der Datei an, die den Suchbegriff enthalten. Im folgenden Beispiel durchsuchen wir die Datei /etc/services nach dem Begriff “ssh”. Als Resultat spuckt uns grep 2 Zeilen der Datei aus, in der der Begriff “ssh” enthalten ist:

$ grep ssh /etc/services
ssh        22/tcp                # SSH Remote Login Protocol
ssh        22/udp

Gerne wird grep in Verbindung mit einer pipe | verwendet. Der Ausgabekanal stdout eines Befehls wird durch die pipe “|” einfach an grep zur weiteren Durchforstung nach einem Suchbegriff weitergeleitet.  Im folgenden Beispiel wollen wir die Prozess-ID von firefox herausfinden. Hierzu könnten wir  alle Prozesse mit dem Befehl …

ps ax

…auflisten , um dann eine mühsame manuelle Suche nach dem Firefoxprozess zu starten. Doch hier können leicht 150 oder 200 Prozesse aufgelistet sein. Um uns die Suche nach dem Firefox-Prozess zu vereinfachen, übergeben wir die Ausgabe des Befehls (hier: 165 Zeilen, 1 Prozess je Zeile) einfach mit einer pipe | an den Befehl grep mit dem Suchmuster “firefox”. Somit erhalten wir nur die Zeilen als Ausgabe, die den Begriff “firefox” enthalten.

$ ps ax | grep firefox
3658 ?        Sl    15:26 /usr/lib/firefox-3.0.11/firefox

Aha! “firefox” hat also die Prozess-ID (pid) 3658.

In diesem simplen Beispiel langt die Grundfunktionalität von grep völlig aus.Doch was tun, wenn wir eine Datei mit Tausenden Zeilen, nach einem Suchbegriff durchforsten, der mehrfach in der Datei vorkommt?

Wie gut, dass man mit grep die Suchergebnisse farblich hervorheben kann. Im nächsten Beispiel verwenden wir den Befehl dmesg, um alle Systemmeldungen des Bootvorgangs anzeigen zu lassen (in meinem Beispiel rund 800 Zeilen). Dann leiten wir diese Ausgabe über eine pipe | an grep weiter und durchforsten die Datei nach Zeilen, die den Begriff “usb” enthalten. Um alle Meldungen des Bootvorgangs farbig anzuzeigen, die “usb” enthalten, verwenden wir grep mit der Option –color . Der Befehl:

dmesg | grep --color usb    

Das Resultat (Auszug:)

grep ubuntu textfilter shell planetuu pipe open source linux dmesg bash admin

grep: Suchbegriffe farblich mit der Option "--color" hervorheben

Wäre es nicht herrlich, wenn alle Resultate immer farblich hervorgehoben würden? Dies lässt sich leicht einrichten. Dazu muss nur in der Datei .bashrc im Homeverzeichnis des Benutzers ein entsprechender alias angelegt werden. Im folgenden Beispiel wird unter Ubuntu für den Benutzer greppy ein solcher alias angelegt, indem in der Datei /home/greppy/.bashrc folgende Zeile hinzugefügt wird:

alias grep='grep --color=auto'

Die Datei .bashrc wird nur einmal zu Beginn des login eingelesen. Die Änderung wird also erst dann wirksam, wenn sich der Benutzer greppy erneut einloggt. Also nicht wundern, wenn es nicht funktioniert. Ausloggen, dann wieder einloggen. Dann sollte es klappen.

Comments are closed