Registrieren Passwort vergessen?

Grep

10. Nov 2008, 13:47

grep [gɹɛp] ist ein wichtiges Programm, das unter den Betriebssystemen Unix und Unix-Derivaten der Suche und Filterung definierter Zeichenketten in Dateien dient. Es wurde ursprünglich von Ken Thompson entwickelt[1].

Der Begriff steht für global/regular expression/print (grep Manual [2] und FH München, Prof. J. Plate [3]) oder auch global search for a regular expression and print out matched lines (Linuxfibel [4]), also etwa „globale Ausgabe regulärer Ausdrücke“. Historisch entwickelte sich der Name aus dem Kommando g/re/p des Unix-Standardeditors ed.

Es existieren zahlreiche Varianten wie egrep, fgrep und agrep, das eine unscharfe Suche nach Textstrings ermöglicht.

Inhaltsverzeichnis

[Bearbeiten] Anwendung

In der Kommandozeile wird grep meist zur Suche in Dateien eingesetzt. Zum Beispiel sei die Textdatei telefonliste.txt mit folgendem Inhalt gegeben:

Huber, Michael, Marketing, -862
Mayer, Susanne, Lager, -212
Schmid, Carola, Geschäftsleitung, -435
Schmidt, Eberhard, Vertrieb, -479
Schmitt, Marie, Labor, -804

Der Befehl

grep Schmid telefonliste.txt

gibt alle Zeilen der Textdatei aus, in denen die Zeichenfolge „Schmid“ enthalten ist:

Schmid, Carola, Geschäftsleitung, -435
Schmidt, Eberhard, Vertrieb, -479

Der Befehl kann auch in Shell-Skripten, beispielsweise in Pipes eingesetzt werden. Durch Kommandozeilenschalter kann die Arbeitsweise von grep geändert werden, so ist es beispielsweise möglich,

  • alle Zeilen herauszusuchen, die den angegebenen Text nicht enthalten (Kommandozeilenschalter "-v")
  • nur Zeilen herauszusuchen, in denen das Suchmuster als ganzes Wort enthalten ist ("-w")
  • die Zeilennummern, in denen der Text enthalten ist, auszugeben ("-n")
  • den Dateinamen aller Dateien auszugeben, die den angegebenen Text enthalten ("-l")
  • die GNU-Variante bietet darüber hinaus die Möglichkeit, nicht die komplette Zeile auszugeben, in der ein Ausdruck vorkommt, sondern lediglich alle Vorkommen des Ausdrucks selbst ("-o").

Beispiel zur Suche nach einer Zeichenfolge in mehreren Dateien:

grep -lir "Zeichenfolge" Verzeichnis/*

[Bearbeiten] agrep

agrep (Approximate GREP) ist eine besondere Version aus der Familie der grep-Programme, die im Gegensatz zu allen Varianten eine unscharfe (fuzzy) Textstringsuche ermöglicht.

agrep wurde in den Jahren 1988-1991 von Udi Manber und Sun Wu an der Universität von Arizona entwickelt und bildet den Kern der Suchmaschine GLIMPSE bzw. HARVEST. Das Programm benutzt aus einer Vielzahl von eingebauten Suchalgorithmen denjenigen, der dem regulären Ausdruck der Benutzereingabe (Suchstring) am besten angepasst ist und die schnellste Suche ermöglicht.

Um 1996 wurde es erstmalig nach OS/2 und DOS, später nach Windows portiert.

agrep steht nicht unter der GNU General Public License, ist aber frei für den privaten und nicht kommerziellen Gebrauch. In einer erneuten Initiative wird derzeit nochmals versucht, die Universität von Arizona zu einer Freigabe zu bewegen.

agrep gehört nicht zur eigentlichen Gruppe der GNU-Utilities.

[Bearbeiten] egrep

egrep (Extended grep) ist zur einfacheren Suche mit erweiterten regulären Ausdrücken. So haben die Zeichen ?, +, {, |, (, und ) bei egrep eine besondere Bedeutung für den Ausdruck, und müssen mit einem umgekehrten Schrägstrich (engl.: backslash) geschützt werden, wenn sie als Text gefunden werden sollen. Als Beispiel sei wieder telefonliste.txt (s.o.) gegeben:

Huber, Michael, Marketing, -862
Mayer, Susanne, Lager, -212
Schmid, Carola, Geschäftsleitung, -435
Schmidt, Eberhard, Vertrieb, -479
Schmitt, Marie, Labor, -804

Der Befehl

egrep "i(d|t)(d|t)?" telefonliste.txt

behandelt die Metazeichen als solche, liefert also die Zeilen mit „Schmid“, „Schmidt“ und „Schmitt“, während das gleiche Ergebnis mit Verwendung derselben Sonderzeichen bei grep nur durch den folgenden Befehl zu erreichen ist:

grep "i\(d\|t\)\(d\|t\)\?" telefonliste.txt

[Bearbeiten] fgrep

fgrep kann immer anstelle von grep verwendet werden, falls das zu suchende Muster keine regulären Ausdrücke enthält. Alle Sonderzeichen in der Musterzeichenkette verlieren ihre Sonderbedeutung und werden als Bestandteil des Musters verstanden. Fgrep arbeitet dadurch etwas schneller als grep und ist vor allem beim Durchsuchen großer Datenmengen nützlich. Man benutzt hierfür den Aho-Corasick-Algorithmus, der auch der Originalversion diente.

[Bearbeiten] Einsatzgebiete

Grep wird in erster Linie dann eingesetzt, wenn Dateien durchsucht werden müssen, zum Beispiel die Quelldateien eines Computerprogramms oder Logdateien. In Zusammenarbeit mit find kann ein ganzer Dateibaum gelesen werden.

$ find /home/benutzername -exec grep -H "Passwort" {} \;

Durchsucht alle Dateien des Quellverzeichnisses des Benutzers benutzername nach der Zeichenkette Passwort und zeigt die gefundenen Zeilen zusammen mit dem Dateinamen an.

Ein zweites Einsatzgebiet ist der automatisierte Aufruf in allen Arten von Shell-Skripten, oft im Rahmen einer Kette von Befehlen.

[Bearbeiten] Anmerkungen

  1. http://beautifulcode.oreillynet.com/ Brian Kernighan: A Regular Expression Matcher
  2. http://www.gnu.org/software/grep/doc/grep_13.html Punkt14
  3. http://www.netzmafia.de/skripten/unix/unix5.html
  4. http://de.linwiki.org/wiki/Linuxfibel_-_Unix-Werkzeuge_-_Grep

[Bearbeiten] Siehe auch

[Bearbeiten] Weitere Weblinks

Dieser Artikel ist eine Kopie aus der freien Enzyklopädie Wikipedia. Am Originalartikel kann jeder Korrekturen und Ergänzungen vornehmen. Zudem kann man frühere Versionen einsehen.
In Kooperation mit Lycos Europe Network