Das Originaldokument stammt von Dias Rawiro
Grep_-_Handout.pdf 21. Nov. 2005
einzelne inhaltliche Änderungen
aus semantischen Gründen

Der Universalfilter grep und die Anwendung von regulären Ausdrücken

I. Einführung

Grep ist ein Kommandozeilenprogramm unter Unix/Linux und dient der Textsuche und Filterung in Dateien. Der Begriff steht für General Regular Expression Processor.

Der grep Befehl kann alleine in der Kommandozeile eingesetzt werden um Dateien zu durchsuchen und in Verbindung mit anderen Programm indem das Ergebnis von grep in ein anderes Programm umgelenkt wird.

Von grep gibt es unterschiedliche Versionen die sich in Ihrem Umfang unterscheiden, wir behandeln hier die Basisversion grep GNU.

Mit grep können auch komplexe Suchanfragen durchgeführt werden, diese werden mit Hilfe von Regular Expressions formuliert.

Einfaches Beispiel: grep Simon telefonliste.txt

II. Syntax und fortgeschrittene Beispiele

grep Simon telefonliste.txt

gibt aus:

Simon, Carlo       2861    A 216 
Simon, Christine   1593    A 322 
Simon, Werner      1796    X D 130 

Wichtige Syntaxoptionen/Programmaufruf

Syntax:

grep [-CVbchilnsvwx] [-Anzahl] [-AB Anzahl] [[-e] Ausdruck |-f Datei] [Datei...]


-i

Groß- und Kleinschreibung werden nicht unterschieden (case-insensitve):

Beispiel: -i martin telefonliste.txt

Was passiert, wenn man nach mit folgendem Befehl nach Martin sucht; "grep martin telefonliste.txt" ? Dann wird nur nach „martin“ gesucht, was zu keinem Ergebnis führt, da nur „Martin“ in der Liste enthalten ist.


-c

Anzeige der Anzahl Zeilen, in denen das Muster gefunden wurde:

Beispiel: grep -ic hoffman telefonliste.txt


-l

Nur Anzeige der Namen der Dateien, in denen das Muster gefunden wurde

Beispiel: grep –il meyer ./public_html

Es gibt noch mehr Syntaxoptionen! Diese sind in den Manual Pages von grep zu finden (man grep)

Anwendung des Pipe-Symbols

"|" (Pipe)

Es gibt 2 Anwendungen von Pipe:

1. AND Verknüpfung von Suchanfragen

Der Befehl lautet:

grep -i wort1 *.doc | grep -i wort2

Beispiel: grep -i martin' telefonliste.txt | grep -i 'Fislake'

2. OR Verknüpfung von Suchanfragen

Der Befehl lautet:

grep -i -E "(wort1|wort2)" *.doc

Beispiel: grep -i –E '(manfred|wolfgang)' telefonliste.txt

III. Reguläre Ausdrücke und Beispiele

Im Allgemeinen sind Regular Expressions ein mächtiges Schema zur Formulierung komplexer Abfragen für Computerprogramme um spezielle Zeichenketten in einer Menge von Zeichenketten zu finden.

Ein solcher Ausdruck wird aus den Zeichen des Alphabets in Kombination mit sogenannten Metazeichen [ ] ( ) { } ? + * ^ $ \ . gebildet. Die Zeichen des Alphabets stehen für sich selbst.

In Grep unterscheidet man grundsätzlich zwischen basic und extended regular expressions.

Um Regular Expressions in Grep zu nutzen muss der Schalter „-E“ (manchmal auch „-e“) aktiviert werden:

grep –E 'Ausdruck' Datei (Anm.: alternativ zu grep -E ist auf vielen Systemen egrep verfügbar)

Basic Regular Expressions

Metazeichen:

Meta Beschreibung Beispiel
. Findet jedes Zeichen grep -E 'Schm.' telefonliste.txt
| Oder grep -E 'Schmidt|Schmiedt' telefonliste.txt
[abc] Findet a,b oder c grep -E '[xz]' telefonliste.txt
[a-z] Findet einmal alle Zeichen von a bis z grep -E '[w-z]' telefonliste.txt
() Gruppierung grep -i -E "(wort1|wort2)" *.doc
\ Folgendes Metazeichen wird als Literal interpretiert grep -E '/?' basic.txt
^ Zeilenanfang grep -E '^schlau' basic.txt
$ Zeilenende grep -E 'schlau$' basic.txt

Extended Regular Expressions

Quantifizierer (Wiederholungsfaktoren): Metazeichen zur Wiederholung

Meta Beschreibung
* Der voranstehende Ausdruck darf beliebig oft (auch keinmal) vorkommen.
+ Der voranstehende Ausdruck muss mindestens einmal vorkommen, darf aber auch mehrfach vorkommen.
? Der voranstehende Ausdruck ist optional, er kann einmal vorkommen, muss es aber nicht, d. h. der Ausdruck kommt null- oder einmal vor.
{n} Der voranstehende Ausdruck muss exakt n-mal vorkommen.
{min,} Der voranstehende Ausdruck muss mindestens min-mal vorkommen.
{min,max} Der voranstehende Ausdruck muss mindestens min-mal und darf maximal max-mal vorkommen.

Beispiele

E-Mail Adresse

Findet alle Zeilen die eine gültige E-Mail Adresse nach dem Schema name@domain.tld enthalten.

grep -E '([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})' emailliste.txt

Relativ-Sätze

Findet (alle) Relativ-Sätze im englischen Text.

grep -E "the .* (who|that)" english.txt

IV. Zusammenfassung

Quellen: