Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 << zurück
Shell-Programmierung von Jürgen Wolf
Einführung, Praxis, Referenz
Buch: Shell-Programmierung

Shell-Programmierung
782 S., mit CD, 44,90 Euro
Rheinwerk Computing
ISBN 3-89842-683-1
gp Kapitel 11 Reguläre Ausdrücke und grep
  gp 11.1 Reguläre Ausdrücke – die Theorie
    gp 11.1.1 Elemente für reguläre Ausdrücke (POSIX-RE)
  gp 11.2 grep
    gp 11.2.1 Wie arbeitet grep?
    gp 11.2.2 grep mit regulären Ausdrücken
    gp 11.2.3 grep mit Pipes
    gp 11.2.4 grep mit Optionen
    gp 11.2.5 egrep (extended grep)
    gp 11.2.6 fgrep (fixed oder fast grep)
    gp 11.2.7 rgrep


Rheinwerk Computing

11.2 gredowntop

Zum Suchen nach bestimmten Mustern in Dateien wird häufig grep verwendet. grep steht für »Global search for a Regular Expression and Print out matched lines«. Es gibt mittlerweile vier verschiedene solcher grep-Kommandos:

gp  grep – der Klassiker
gp  egrep – Kurzform für »Extended Grep«, also ein erweitertes grep, welches im Gegensatz zu grep noch mehr reguläre Ausdrücke versteht.
gp  fgrep – Kurzform für »Fixed Grep« (oder gern auch »Faster Grep«), welches weniger reguläre Ausdrücke als grep versteht und dadurch erheblich schneller bei der Suche in großen Dateien ist als grep oder egrep.
gp  rgrep – Kurzform für »Rekursive Grep«. rgrep wird für die rekursive Suche in Unterverzeichnissen verwendet. Es muss allerdings erwähnt werden, dass rgrep die Unterverzeichnisse auch komplett durchläuft.

Rheinwerk Computing

11.2.1 Wie arbeitet grep?  downtop

Das grep-Kommando sucht nach einem Muster von Zeichen in einer oder mehreren Datei(en). Enthält das Muster ein Whitespace, muss es entsprechend gequotet werden. Das Muster ist also entweder eine gequotete Zeichenkette oder ein einfaches Wort. Alle anderen Worte hinter dem Muster werden von grep dann als Datei(en) verwendet, in denen nach dem Muster gesucht wird. Die Ausgabe sendet grep an die Standardausgabe (meistens dem Bildschirm) und nimmt auch keinerlei Änderung an der Eingabedatei vor. Die Syntax:grep wort datei1 [datei2] ... [datein]

Ein viel zitiertes Beispiel:

you@host > grep john /etc/passwd
john:x:1002:100:Jonathan Wolf:/home/john:/bin/csh

grep sucht hier nach dem Muster »john« in der Datei /etc/passwd. Bei Erfolg wird die entsprechende Zeile auf dem Bildschirm ausgegeben. Wird das Muster nicht gefunden, gibt es keine Ausgabe und auch keine Fehlermeldung. Existiert die Datei nicht, wird eine Fehlermeldung auf dem Bildschirm ausgegeben.

Als Rückgabewert von grep erhalten Sie bei einer erfolgreichen Suche den Wert 0. Wird ein Muster nicht gefunden, gibt grep 1 als Exit-Code zurück, und wird die Datei nicht gefunden, wird 2 zurückgegeben. Der Rückgabewert von grep ist in den Shellscripts häufig von Bedeutung, da Sie relativ selten die Ausgaben auf dem Bildschirm machen werden. Und vom Exit-Code hängt es häufig auch ab, wie Ihr Script weiterlaufen soll.

grep gibt den Exit-Code 0 zurück, also wurde ein Muster gefunden:

you@host > grep you /etc/passwd > /dev/null
you@host > echo $?
0

grep gibt den Exit-Code 1 zurück, somit wurde kein übereinstimmendes Muster gefunden:

you@host > grep gibtsnicht /etc/passwd > /dev/null
you@host > echo $?
1

grep gibt den Exit-Code 2 zurück, die Datei scheint nicht zu existieren (oder wurde, wie hier, falsch geschrieben):

you@host > grep you /etc/PASSwd > /dev/null 2>&1
you@host > echo $?
2

grep kann seine Eingabe neben Dateien auch von der Standardeingabe oder einer Pipe erhalten.

you@host > grep echo < script1
echo "Ausgabe1"
echo "Ausgabe2"
you@host > cat script1 | grep echo
echo "Ausgabe1"
echo "Ausgabe2"

Auch grep kennt eine ganze Menge regulärer Ausdrücke. Metazeichen helfen Ihnen dabei, sich mit grep ein Suchmuster zu erstellen. Und natürlich unterstützt auch grep viele Optionen, die Sie dem Kommando mitgeben können. Auf einige dieser Features wird in den folgenden Abschnitten eingegangen.


Rheinwerk Computing

11.2.2 grep mit regulären Ausdrücken  downtop

Das grep eines der ältesten Programme ist, das reguläre Ausdrücke kennt, wurde bereits beschrieben. Welche regulären Ausdrücke grep so alles kennt, wird in Tabelle 11.4 aufgelistet. Allerdings kennt grep nicht alle regulären Ausdrücke, weshalb es außerdem das Kommando egrep gibt, das noch einiges mehr versteht (siehe Tabelle 11.5).


Tabelle 11.4   Reguläre Ausdrücke von grep

Zeichen Funktion Beispiel Bedeutung
^ Anfang der Zeile '^wort' Gibt alle Zeilen aus, die mit »wort« beginnen.
$ Ende der Zeile 'wort$' Gibt alle Zeilen aus, die mit »wort« enden.
^$ komplette Zeile '^wort$' Gibt alle vollständige Zeilen mit dem Muster »wort« aus.
. beliebiges Zeichen 'w.rt' Gibt alle Zeilen aus, die ein »w«, einen beliebigen Buchstaben und »rt« enthalten (bspw. »wort«, »wert«, »wirt«, »wart«).
* beliebig oft 'wort*' Gibt alle Zeilen aus mit beliebig vielen (oder auch gar keinen) des vorangegangenen Zeichens.
.* beliebig viele 'wort.*wort' Die Kombination .* steht für beliebig viele Zeichen.
[] ein Zeichen aus dem Bereich '[Ww]ort' Gibt alle Zeilen aus, welche Zeichen in dem angegebenen Bereich (im Beispiel nach »Wort« oder »wort«) enthalten.
[^] kein Zeichen aus dem Bereich '[^A–VX–Za–z]ort' Die Zeichen, die im angegebenen Bereich stehen, werden nicht beachtet (im Beispiel kann »Wort« gefunden werden, nicht aber »Tort« oder »Sort« und auch nicht »wort«).
\< Anfang eines Wortes '\<wort' Findet hier alles, was mit »wort« beginnt (bspw. »wort«, »wortreich« aber nicht »Vorwort« oder »Nachwort«).
\> Ende eines Wortes 'wort\>' Findet alle Zeilen, welche mit »wort« enden (bspw. »Vorwort« oder »Nachwort«, nicht aber »wort« oder »wortreich«).
\<\> ein Wort '\<wort\>' Findet exakt »wort« und nicht »Nachwort« oder »wortreich«.
\(...\) Backreferenz '\(wort\)' Merkt sich die eingeschlossenen Muster vor, um darauf später über \1 zuzugreifen. Bis zu neun Muster können auf diese Weise gespeichert werden.
x\{m\} exakte Wiederholung des Zeichens x\{3\} Exakt 3-maliges Auftreten des Zeichens »x«.
x\{m,\} mindestens Wiederholung des Zeichens x\{3,\} Mindestens ein 3-maliges Auftreten des Zeichens »x«.
x\{m,n\} mindestens bis maxmiale Wiederholung des Zeichens x\{3,6\} Mindestens ein 3-maliges Auftreten des Zeichens »x« bis maximal 6-maliges Auftreten (nicht mehr).

Zu diesen regulären Ausdrücken kennt egrep noch folgende:


Tabelle 11.5   Weitere reguläre Ausdrucke von egrep

Zeichen Funktion Beispiel Bedeutung
+ mindestens ein Mal 'wort[0–9]+' Es muss mindestens eine Ziffer aus dem Bereich vorkommen.
? null oder ein Mal 'wort[0–9]?' Eine Ziffer aus dem Bereich darf, muss aber nicht vorkommen.
| Alternativen 'worta|wort' Das Wort »worta« oder »wortb«.

Hier jetzt einige Beispiele zu den regulären Ausdrücken mit grep. Folgende Datei mit folgendem Muster sei hierfür gegeben:

you@host > cat mrolymia.dat
Larry Scott USA 1965 1966
Sergio Oliva USA 1967 1968 1969
Arnold Schwarzenegger Österreich 1970 1971 1972 1973 1974 1975
Franco Columbu Argentinien 1976 1981
Chris Dickerson USA 1982
Samir Bannout Libanon 1983
Lee Haney USA 1984 1985 1986 1987 1988 1989 1990 1991
Dorian Yates Grossbritannien 1992 1993 1994 1995 1996 1997
Ronnie Coleman USA 1998 1999 2000 2001 2002 2003 2004

Einfachstes Beispiel:

you@host > grep Libanon mrolymia.dat
Samir Bannout Libanon 1983

Hierbei werden alle Zeilen ausgegeben, die den regulären Ausdruck »Libanon« in der Datei mrolympia.dat enthalten. Nächstes Beispiel:

you@host > grep '^S' mrolymia.dat
Sergio Oliva USA 1967 1968 1969
Samir Bannout Libanon 1983

Hiermit werden alle Zeilen ausgegeben, die mit dem Zeichen »S« beginnen. Das Caret-Zeichen (^) steht immer für den Anfang einer Zeile. Nächstes Beispiel:

you@host > grep '1$' mrolymia.dat
Franco Columbu Argentinien 1976 1981
Lee Haney USA 1984 1985 1986 1987 1988 1989 1990 1991

Hiermit werden alle Zeilen ausgegeben, die mit dem Zeichen »1« enden. Das Dollarzeichen steht hierbei für das Ende einer Zeile. Nächstes Beispiel:

you@host > grep Sergio Yates mrolymia.dat
grep: Yates: Datei oder Verzeichnis nicht gefunden
mrolymia.dat:Sergio Oliva USA 1967 1968 1969

Hier wurde ein Fehler gemacht, da grep das dritte Argument bereits als eine Dateiangabe, in der nach einem Muster gesucht wird, behandelt. Einen Namen wie »Sergio Yates« gibt es nämlich nicht in dieser Datei. Damit das Muster auch komplett zum Vergleich für grep verwendet wird, müssen Sie es zwischen Single Quoten stellen.

you@host > grep 'Sergio Yates' mrolymia.dat
you@host > echo $?
1

Das nächste Beispiel:

you@host > grep '197.' mrolymia.dat
Arnold Schwarzenegger Österreich 1970 1971 1972 1973 1974 1975 
Franco Columbu Argentinien 1976 1981

Wer war hier in den 70-ern am besten. Damit geben Sie alle Zeilen aus, in denen sich das Muster »197« und ein weiteres beliebiges einzelnes Zeichen befindet. Sofern Sie wirklich nach einem Punkt suchen, müssen Sie ein Backslash davor setzen. Dies gilt übrigens für alle Metazeichen. Nächstes Beispiel:

you@host > grep '^[AS]' mrolymia.dat
Sergio Oliva USA 1967 1968 1969
Arnold Schwarzenegger Österreich 1970 1971 1972 1973 1974 1975
Samir Bannout Libanon 1983

Hier wird jede Zeile ausgegeben, die mit dem Zeichen »A« und »S« beginnt. Nächstes Beispiel:

you@host > grep '^[^AS]' mrolymia.dat
Larry Scott USA 1965 1966
Franco Columbu Argentinien 1976 1981
Chris Dickerson USA 1982
Lee Haney USA 1984 1985 1986 1987 1988 1989 1990 1991
Dorian Yates Grossbritannien 1992 1993 1994 1995 1996 1997
Ronnie Coleman USA 1998 1999 2000 2001 2002 2003 2004

Jetzt werden alle Zeilen ausgegeben, die nicht ([^AS]) mit dem Zeichen »A« oder »S« beginnen. Nächstes Beispiel:

you@host > grep '^S.*Libanon' mrolymia.dat
Samir Bannout Libanon 1983

Hier liefert grep die Zeile zurück, die mit einem Zeichen »S« beginnt, gefolgt von beliebig vielen Zeichen und die Zeichenfolge »Libanon« enthält. Nächstes Beispiel:

you@host > grep '^S.*196.' mrolymia.dat
Sergio Oliva USA 1967 1968 1969

Ähnlich wie im Beispiel zuvor werden die Zeilen ausgegeben, die mit dem Zeichen »S« beginnen und die Textfolge »196« mit einem beliebigen weiteren Zeichen enthalten. Nächstes Beispiel:

you@host > grep '[a-z]\{14\}' mrolymia.dat
Arnold Schwarzenegger Österreich 1970 1971 1972 1973 1974 1975
Dorian Yates Grossbritannien 1992 1993 1994 1995 1996 1997

Gibt alle Zeilen aus, in denen 14 Buchstaben hintereinander Kleinbuchstaben sind. Nächstes Beispiel:

you@host > grep '\<Col' mrolymia.dat
Franco Columbu Argentinien 1976 1981
Ronnie Coleman USA 1998 1999 2000 2001 2002 2003 2004

Hier werden alle Zeilen ausgegeben, in denen sich ein Wort befindet, das mit »Col« beginnt. Nächstes Beispiel:

you@host > grep 'A\>' mrolymia.dat
Larry Scott USA 1965 1966
Sergio Oliva USA 1967 1968 1969
Chris Dickerson USA 1982
Lee Haney USA 1984 1985 1986 1987 1988 1989 1990 1991
Ronnie Coleman USA 1998 1999 2000 2001 2002 2003 2004

Das Gegenteil vom Beispiel zuvor. Hier werden alle Zeilen ausgegeben, in denen sich ein Wort befindet, welches mit »A« endet. Nächstes Beispiel:

you@host > grep '\<Coleman\>' mrolymia.dat
Ronnie Coleman USA 1998 1999 2000 2001 2002 2003 2004

Hierbei wird nach einem vollständigen Wort »Coleman« gesucht. Also kein »AColeman« und auch kein »Colemann«. Nächstes Beispiel:

you@host > grep '\<.*ien.*\>' mrolymia.dat
Franco Columbu Argentinien 1976 1981
Dorian Yates Grossbritannien 1992 1993 1994 1995 1996 1997

Hier werden alle Zeilen ausgegeben, die ein Wort mit der Zeichenfolge »ien« enthalten. Davor und danach können sich beliebig viele Zeichen befinden. Nächstes Beispiel:

you@host > grep '\<[G].*ien\>' mrolymia.dat
Dorian Yates Grossbritannien 1992 1993 1994 1995 1996 1997

Hier wird nach einem Wort gesucht, das mit dem Großbuchstaben »G« beginnt und mit der Zeichenfolge »ien« endet. Dazwischen können sich beliebig viele Zeichen befinden.

Natürlich können Sie grep auch dazu verwenden, in einem ganzen Verzeichnis die Dateien nach einem bestimmten Muster abzusuchen. Hier können Sie wieder das Metazeichen * als Platzhalter für alle Dateien im Verzeichnis verwenden:

you@host > grep 'echo' *
...

Hier werden im aktuellen Arbeitsverzeichnis alle Dateien nach dem Muster »echo« durchsucht.


Rheinwerk Computing

11.2.3 grep mit Pipes  downtop

Häufig wird grep in Verbindung mit einer Pipe verwendet. Hierbei übergeben Sie grep dann statt einer Datei als drittes Argument für die Eingabe die Daten durch eine Pipe von der Standardausgabe eines anderen Kommandos. Bspw.:

you@host > ps -ef | grep $USER

Hiermit bekommen Sie alle Prozesse aufgelistet, deren Eigentümer der aktuelle User ist bzw. die dieser gestartet hat. Dabei gibt ps seine Ausgabe durch die Pipe an die Standardeingabe von grep. grep wiederum sucht dann in der entsprechenden Ausgabe nach dem entsprechenden Muster und gibt gegebenenfalls die Zeile(n) aus, die mit dem Muster übereinstimmen. Natürlich können Sie hierbei auch, wie schon gehabt, die regulären Ausdrücke verwenden. Die Syntax:

kommando | grep muster

Ebenfalls relativ häufig wird grep mit ls zur Suche bestimmter Dateien verwendet:

you@host > ls | grep '^scr.*'
script1
script1~
script2
script2~

Im Abschnitt zuvor haben Sie mit

you@host > grep 'echo' *

alle Dateien nach dem Muster »echo«' durchsucht. Meistens, mir ging es zumindest so, haben Sie neben einfachen Scripts auch noch eine Menge Dokumentationen im Verzeichnis herumliegen. Wollen Sie jetzt auch noch die Dateinamen mithilfe regulärer Ausdrücke eingrenzen, können Sie die Ausgabe von grep an die Eingabe eines weiteren grep-Aufrufs hängen:

you@host > grep 'echo' * | grep 'scrip.*'
...

Jetzt wird in allen Dateien des aktuellen Verzeichnisses nach dem Muster »echo« gesucht (erstes grep) und anschließend (zweites grep) werden nur die Dateien berücksichtigt, die mit der Zeichenfolge »scrip« beginnen, gefolgt von beliebig vielen weiteren Zeichen.


Rheinwerk Computing

11.2.4 grep mit Optionen  downtop

Natürlich bietet Ihnen grep neben den regulären Ausdrücken auch noch eine Menge weiterer Optionen an, mit denen Sie das Verhalten, insbesondere der Standardausgabe steuern können. Im folgenden Abschnitt finden Sie eine Liste mit den interessantesten und gängigsten Optionen (was bedeutet, dass dies längst nicht alle sind). Reichen Ihnen diese Optionen nicht aus, müssen Sie in den Manual-Page blättern. Als Beispiel dient wieder unsere Datei mrolympia.dat:

you@host > cat mrolymia.dat
Larry Scott USA 1965 1966
Sergio Oliva USA 1967 1968 1969
Arnold Schwarzenegger Österreich 1970 1971 1972 1973 1974 1975
Franco Columbu Argentinien 1976 1981
Chris Dickerson USA 1982
Samir Bannout Libanon 1983
Lee Haney USA 1984 1985 1986 1987 1988 1989 1990 1991
Dorian Yates Grossbritannien 1992 1993 1994 1995 1996 1997
Ronnie Coleman USA 1998 1999 2000 2001 2002 2003 2004

-n – damit wird die Zeile zurückgegeben, in der das Suchmuster gefunden wurde, und zwar mit zusätzlich n Zeilen vor und nach dieser Zeile. In der Praxis:

you@host > grep –1 Sergio mrolymia.dat
Larry Scott USA 1965 1966
Sergio Oliva USA 1967 1968 1969
Arnold Schwarzenegger Österreich 1970 1971 1972 1973 1974 1975

Hierbei wurde vor und nach der gefundenen Zeile jeweils eine zusätzliche Zeile ausgegeben. Dies ist in der Praxis bei einen etwas längeren Text mit mehreren Abschnitten sehr sinnvoll, da man häufig mit einem ausgegebenen Teilsatz aus der Zeile 343 nicht viel anfangen kann.

-A anzahl – ähnlich wie -n, nur dass noch zusätzlich »anzahl« Zeilen mit ausgegeben werden, die nach der Zeile enthalten sind.

-B anzahl – wie –A anzahl, nur dass »anzahl« Zeilen ausgegeben werden, die vor der Zeile enthalten sind, in welcher der reguläre Ausdruck abgedeckt wurde.

-c – (für count) hiermit wird nur die Anzahl von Zeilen ausgegeben, die durch den regulären Ausdruck abgedeckt werden.

you@host > grep -c '.*' mrolymia.dat
9
you@host > grep -c 'USA' mrolymia.dat
5

Hier wurden zum Beispiel die Daten aller Sportler ausgegeben und beim nächsten Ausdruck nur noch die Teilnehmer aus den »USA«. 5 von den 9 ehemaligen Titelträgern kamen also aus den USA.

-h – bei dieser Option wird der Dateiname, in dem der Suchstring gefunden wurde, nicht vor den Zeilen mit ausgegeben:

you@host > grep 'Ausgabe1' *
script1:echo "Ausgabe1"
script1~:echo "Ausgabe1"
you@host > grep -h 'Ausgabe1' *
echo "Ausgabe1"
echo "Ausgabe1"

-i – es wird nicht zwischen Groß- und Kleinschreibung unterschieden. Ein Beispiel:

you@host > grep 'uSa' mrolymia.dat
you@host > grep -i 'uSa' mrolymia.dat
Larry Scott USA 1965 1966
Sergio Oliva USA 1967 1968 1969
Chris Dickerson USA 1982
Lee Haney USA 1984 1985 1986 1987 1988 1989 1990 1991
Ronnie Coleman USA 1998 1999 2000 2001 2002 2003 2004

-l – bei dieser Option werden nur die Dateinamen aufgelistet, in denen eine Zeile mit dem entsprechenden Suchmuster gefunden wurde:

you@host > grep -l echo *
Kap 1 bis 9.doc
ksh.2005–02–02.linux.i386
script1
script1~
script2
script2~

-n – hiermit wird vor jeder gefundenen Zeile in der Datei die laufende Zeilennummer mit ausgegeben. Bspw.:

you@host > grep -n echo *
script1:4:   echo "Die Ausgabe wollen wir nicht!!!"
script1:7:echo "Ausgabe1"
script1:11:echo "Ausgabe2"
...
script2:9:   echo "Starte script1 ..."
script2~:7:   echo "Warte ein wenig ..."
script2~:9:   echo "Starte script1 ..."

-q – bei Verwendung dieser Option erfolgt keine Ausgabe, sondern es wird 0 zurückgegeben, wenn ein Suchtext gefunden wurde, oder 1, wenn Suche erfolglos war. Diese Option wird gewöhnlich in Shellscripts verwendet, bei denen man sich meistens nur dafür interessiert, ob eine Datei einen Suchtext enthält oder nicht.

-s – mit dieser Option werden keine Fehlermeldungen ausgegeben, wenn eine Datei nicht existiert.

you@host > grep test /etc/gibtsnicht
grep: /etc/gibtsnicht: Datei oder Verzeichnis nicht gefunden
you@host > grep -s test /etc/gibtsnicht
you@host >

-v – damit werden alle Zeilen ausgegeben, die nicht durch den angegebenen regulären Ausdruck abgedeckt werden:

you@host > grep -v 'USA' mrolymia.dat
Arnold Schwarzenegger Österreich 1970 1971 1972 1973 1974 1975
Franco Columbu Argentinien 1976 1981
Samir Bannout Libanon 1983
Dorian Yates Grossbritannien 1992 1993 1994 1995 1996 1997

-w – eine Abkürzung für \<wort\>. Damit wird nach ganzen Wörtern im Suchtext gesucht:

you@host > grep 'Lib' mrolymia.dat
Samir Bannout Libanon 1983
you@host > grep -w 'Lib' mrolymia.dat
you@host >

Rheinwerk Computing

11.2.5 egrep (extended grep)  downtop

Wie Sie bereits erfahren haben, lassen sich mit egrep erweiterte und weitaus komplexere reguläre Ausdrücke bilden. Allerdings wird Otto Normalverbraucher (wie auch die meisten Systemadministratoren) mit grep mehr als zufrieden sein. Komplexere reguläre Ausdrücke gehen natürlich enorm auf Kosten der Ausführgeschwindigkeit. Übrigens können Sie einen egrep-Aufruf auch mit grep und der Option –E realisieren:

grep -E regex Datei

Einige Beispiele mit egrep:

you@host > egrep 'Colombo|Columbu' mrolymia.dat
Franco Columbu Argentinien 1976 1981
you@host > egrep 'Colombo|Columbu|Col' mrolymia.dat
Franco Columbu Argentinien 1976 1981
Ronnie Coleman USA 1998 1999 2000 2001 2002 2003 2004

Wissen Sie nicht genau, wie man einen bestimmten Namen schreibt, können Sie mit | mehrere Suchmuster miteinander verknüpfen. Im Beispiel wird nach »Colombo« oder »Columbu« und im zweiten Beispiel noch zusätzlich nach einer Zeichenfolge »Col« gesucht. Kennen Sie mehrere Personen mit dem Namen »Olivia« und wollen nach einem »Sergio Olivia« und »Gregor Olivia« suchen, können Sie das Ganze folgendermaßen definieren:

egrep '(Sergio|Gregor) Olivia' mrolympia.dat

Nächstes Beispiel:

you@host > egrep 'y+' mrolymia.dat
Larry Scott USA 1965 1966
Lee Haney USA 1984 1985 1986 1987 1988 1989 1990 1991

Mit dem + wird nach mindestens einem »y«-Zeichen gesucht. Wollen Sie bspw. alle Zeilen einer Datei ausgeben, die mit mindestens einem oder mehreren Leerzeichen beginnen, können Sie dies folgendermaßen definieren:

you@host > egrep '^ +' mrolymia.dat

Nächstes Beispiel:

you@host > egrep 'US?' mrolymia.dat
Larry Scott USA 1965 1966
Sergio Oliva USA 1967 1968 1969
Chris Dickerson USA 1982
Lee Haney USA 1984 1985 1986 1987 1988 1989 1990 1991
Ronnie Coleman USA 1998 1999 2000 2001 2002 2003 2004

Wissen Sie jetzt nicht, ob die Zeichenfolge für die USA »USA« oder »US« lautet, können Sie das Fragezeichen verwenden. Damit legen Sie fest, dass hier ein Zeichen sein darf, aber nicht muss. Somit wird sowohl die Zeichenfolge »US« als auch »USA« gefunden.


Rheinwerk Computing

11.2.6 fgrep (fixed oder fast grep)  downtop

fgrep wird vorwiegend für »schnelle greps« verwendet (fgrep = fast grep). Allerdings ist nur eine Suche nach einfachen Zeichenketten möglich. Reguläre Ausdrücke gibt es hierbei nicht – ein Vorteil, wenn Sie nach Zeichenfolgen suchen, die Metazeichen enthalten.


Rheinwerk Computing

11.2.7 rgrep  toptop

Weil grep nur im aktuellen Verzeichnis sucht, wurde rgrep entwickelt. rgrep sucht mit einer rekursiven Suche in Unterverzeichnissen nach entsprechenden Mustern. Bei einer großen Verzeichnistiefe kann dies allerdings problematisch werden. Wenn Sie bspw. nur das aktuelle Verzeichnis und die direkten Unterverzeichnisse durchsuchen wollen, so würde auch ein grep wie

grep regex */*

ausreichen. Mehr zu rgrep entnehmen Sie bitte der Manual-Page.



Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

 << zurück
  
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Shell-Programmierung
Shell-Programmierung
bestellen
 Buchtipps
Zum Rheinwerk-Shop: Shell-Programmierung






 Shell-Programmierung


Zum Rheinwerk-Shop: Linux-Server






 Linux-Server


Zum Rheinwerk-Shop: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Rheinwerk-Shop: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Rheinwerk-Shop: Linux Handbuch






 Linux Handbuch


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern