Wer sucht der findet auch

grep, seine Verwandten und Reguläre Ausdrücke

Das Unix-Tool grep sucht einen Ausdruck in einer Datei. Da es von Unix kommt ist ein natürlich ein Kommandozeilen-Programm, aber es gibt auch eine grep-Variante die im WIMP läuft, aber dazu später. Ersteinmal eine kleine Einführung in grep.

Der Aufruf von grep sieht wie folgt aus: grep [Optionen] "Regulärer Ausdruck" Datei. Der einfachste Reguläre Ausdruck ist ein Wort, daß in der Datei gesucht werden soll: grep "hallo" text. Ist das Wort "hallo" in einer Zeile der Datei "text" vorhanden, gibt grep die Zeile bzw. Zeilen auf den Bildschirm aus, in der "Hallo" vorkommt. Mit der Option "-i" wird die Groß- und Kleinschreibung nicht beachtet und mit "-n" wird für jede gefundene Zeile die Zeilennummer mit angegeben. Z. B.: grep -in "HaLLo" text.

Mit einen Regulärer Ausdruck kann man aber weitaus gezielter suchen. Mit grep -i "h.llo" text wird nach "Hallo", "hello", "HxLLo" usw. gesucht. Durch den Punkt kann der zweite Buchstabe ein beliebiges Zeichen sein, es wird also nicht nach "hLLo" oder "HeaLLO" gesucht. Durch die eckige Klammer kann man das beliebige Zeichen auf wenige beschränken: grep "h[ae]llo" text. Hier wird nur nach "hallo" oder "hello" gefahndet. Wenn das erste Zeichen in der eckigen Klammer ein "^" ist, sind die Zeichen in der Klammer nicht erlaubt: grep "h[^ea].llo" text.

Wenn nach einen Zeichen bzw. nach dem Punkt der Stern auftaucht, darf dieses Zeichen beliebig oft (0 oder mehr) an dieser Stelle vorkommen. Die Abfrage grep -i "he*llo" text findet z. B. "hello", "heeello" und "Hllo".

Möchte man nach einem Wort bzw. Zeichenfolge am Anfang der Zeile suchen benutzt man das Symbol "^" für den Zeilenanfang. Das Zeichen für das Zeilenende ist das Dollar-Zeichen. grep -i "^anfang" text und grep -i "ende$" text zeigen dies. Soll nicht nur eine Datei durchsucht werden, kann man statt nur eine Datei auch mehrere durchsucht werden: grep "hallo" text text2 text3.

So, das reicht erstmal. Die Beschreibung ist zwar nicht vollständig, aber man kann mehr über grep in diversen Unix-Bücher und natürlich in der Programm-Beschreibung lesen. grep und die Beispiele kann man "hier" laden. Zusätzlich ist auch egrep, daß mit den erweiterten Regulären Ausdrücke arbeitet, dabei.

Mehr oder weniger hat StrongED den gleichen Funktionsumfang wie grep (plus einigen Features mehr, wie z. B. Textersetzung und -editierung) ;-). Aber um eine bzw. mehrere Datei(en) zu durchsuchen, muß man diese in StrongED laden (kann schon etwas dauern) und dann muß man alle Textfenster einzeln schließen. Dies ist mit grep nicht nötig, hat aber den Nachteil, das es ein Kommandozeilen-Programm ist.

Doch es gibt noch ein Variante von grep die ein WIMP-Frontend hat. Dieses Programm heißt agrep und entspricht weitesgehend grep, doch man kann mit agrep komfortabel im Desktop arbeiten. Leider kann man nicht eine Datei-Auswahl auf agrep ziehen, sondern muß jede Datei einzeln ziehen und es arbeitet im Gegensatz zu grep nicht mit binären Dateien. Dafür muß man das Suchemuster nicht exakt angeben, es wird Fehlertolerant gesucht. grep und seine Verwandten kommen wie schon erwähnt aus der Unix-Welt. Zu grep fehlt nur noch, daß man Text, den man gefunden hat durch anderen ersetzt. Dies gibt es natürlich auch, ist aber schon eine vollständige Programmiersprache, wie z. B. awk oder Perl.

Carlos Michael Santillán

Beispiele laden (Zip, 2,3 kByte)
FTP-Quellen für grep, egrep und agrep über ArcArchie