Solaris Handbuch für Fortgeschrittene Benutzer

Kapitel 4 Suchen in Dateien

In diesem Kapitel erfahren Sie, wie Dateien und Verzeichnisse nach Stichwörtern durchsuchen.

4.1 Nach Zeichenfolgen suchen (grep)

Mit dem Befehl grep können Sie in einer Datei nach einer bestimmten Zeichenfolge suchen. grep wird in folgendem Format eingegeben:

$ grep zeichenfolge datei

zeichenfolge ist die gesuchte Zeichenfolge und datei die Datei, in der gesucht werden soll.


Hinweis -

Eine Zeichenfolge ist eine beliebige Kombination aus einem oder mehreren Zeichen. Einzelne Buchstaben werden ebenso als Zeichenfolgen bezeichnet wie Wörter oder ganze Sätze. Zeichenfolgen können außerdem Leerzeichen, Satzzeichen und unsichtbare Steuerzeichen enthalten.


Im folgenden Beispiel wird in der Datei telefon nach der Rufnummer von Edgar Allan Poe gesucht:

$ grep Poe telefon

Edgar Allan Poe     x728364

$

Wenn die angegebene Zeichenfolge mehrmals vorkommt, werden alle passenden Zeilen angezeigt:

$ grep Edgar telefon

Edgar Winter        x764383

Edgar Allan Poe     x728364

$ grep Ed telefon

Eduard Müller       x742362

Edgar Winter        x764383

Edgar Allan Poe     x728364

$

Da grep zwischen Groß- und Kleinbuchstaben unterscheidet, müssen Sie bei der Eingabe auf die korrekte Schreibweise achten:

$ grep edgar telefon

$ grep Edgar telefon

Edgar Winter        x764383

Edgar Allan Poe     x728364

$

Beim ersten Versuch wurden keine passenden Zeilen gefunden, weil die Zeichenfolge edgar" in der Datei nicht vorkommt.

4.1.1 grep als Filter

grep wird häufig zusammen mit anderen Befehlen verwendet, um nicht benötigte Informationen vor der Ausgabe auszufiltern. Dazu werden die von dem Befehl ausgegebenen Daten mit Hilfe des Pipe-Symbols | an grep übergeben.

Mit dem folgenden Befehl zeigen Sie alle Dateien mit der Endung .ps an, die im Mai erstellt wurden:

$ ls -l *.ps | grep Mai

Der erste Teil der Befehlszeile

ls -l *.ps

gibt eine Liste aller Dateien mit der Endung .ps im aktuellen Verzeichnis aus:

$ ls -l *.ps

-rw-r--r--  1 elvis       7228 Apr 22 15:07 change.ps

-rw-r--r--  1 elvis       2356 Mai 22 12:56 clock.ps

-rw-r--r--  1 elvis       1567 Jun 22 12:56 cmdtool.ps

-rw-r--r--  1 elvis      10198 Jun 22 15:07 command.ps

-rw-r--r--  1 elvis       5644 Mai 22 15:07 buttons.ps

$

Der zweite Teil,

| grep Mai

übergibt diese Liste an den Befehl grep, der die Dateien ausfiltert, in deren Beschreibung die Zeichenfolge Mai" vorkommt:

$ ls -l *.ps | grep Mai

-rw-r--r--  1 elvis       2356 Mai 22 12:56 clock.ps

-rw-r--r--  1 elvis       5644 Mai 22 15:07 buttons.ps

$

4.1.2 grep mit mehrteiligen Zeichenfolgen

Um nach Zeichenfolgen zu suchen, die aus mehr als einem Wort bestehen, setzen Sie die Zeichenfolge in einfache oder doppelte Anführungszeichen:

$ grep "Eduard Müller" telefon

Eduard Müller x742362

$

Sie können auch in mehreren Dateien nach einer Zeichenfolge suchen. Wird die Zeichenfolge gefunden, gibt grep den (die) Namen der Datei(en), einen Doppelpunkt und danach die gefundene Zeile aus:

$ grep at *

film:Walter Matthau

alaska:Alaska ist der größte Staat der USA.

computer:zeichnen sich in der Datenverarbeitung neue Trends

$

4.1.3 Ausschließende Suche

Um in einer Datei nach allen Zeilen zu suchen, in denen eine bestimmte Zeichenfolge nicht enthalten ist, geben Sie grep mit der Option -v ein. Im folgenden Beispiel wird in den Dateien des aktuellen Verzeichnisses nach allen Zeilen gesucht, in denen der Buchstabe e nicht vorkommt:

$ ls

alaska     film    schulung    telefon    termine

$ grep -v e *

film:Marlon Brando

telefon:Hans Schmid x834657

$

4.1.4 Weitere Suchmöglichkeiten

Sie können mit dem Befehl grep auch nach mehreren gleichartigen Wörtern oder Zeichenfolgen suchen, die Sie durch einen regulären Ausdruck spezifizieren. Reguläre Ausdrücke bestehen aus Buchstaben, Zahlen und speziellen Zeichen, die als Metazeichen bezeichnet und von grep auf eine bestimmte Weise interpretiert werden. Um eine Interpretation durch das System zu verhindern, müssen Metazeichen in der Befehlszeile in Anführungszeichen gesetzt oder mit einem Gegenschrägstrich (\) geschützt werden. Beispiele für Metazeichen sind: & ! . * $ ? und \.

Sie können die beiden Zeichen auch kombinieren. Mit dem folgenden Befehl suchen Sie nach allen Zeilen, in denen nur der Buchstabe b" steht:

$ grep '^b$' liste

suchen Sie also nach allen Zeilen, in denen eine Zeichenfolge aus de" und einem beliebigen dritten Buchstaben enthalten ist, z. B. der", dem", Katheder" oder Ende" (Leerzeichen sind ebenfalls gültig).

Soll dagegen nach allen Wörtern gesucht werden, die den Buchstaben n" enthalten, müßten Sie folgenden Befehl eingeben:

$ grep 'nn*' list

Um nach allen Wörter zu suchen, in denen die Buchstabenfolge nn" vorkommt, müßten Sie den Befehl so eingeben:

$ grep 'nnn*' liste

Am besten experimentieren Sie ein wenig mit solchen Suchmustern, um sich mit der Bedeutung der Metazeichen vertraut zu machen.

4.1.5 Nach Metazeichen suchen

Nehmen wir an, Sie wollen in einem Text nach allen Zeilen suchen, in denen ein Dollarzeichen vorkommt. Damit grep das Zeichen nicht als Metazeichen interpretiert, müssen Sie ihm einen Gegenschrägstrich (\) voranstellen. Auf diese Weise kann auch nach allen weiteren Metazeichen (& ! . * ? und \ selbst) gesucht werden.

Mit dem folgenden Ausdruck suchen Sie nach allen Zeilen, die mit einem Punkt beginnen:

$ grep ^\.

Auf diese Weise könnten Sie zum Beispiel in einem mit nroff oder troff formatierten Text nach Formatanweisungen suchen, da diese immer mit einem Punkt beginnen. In Tabelle 4-1 sind die in regulären Ausdrücken am häufigsten verwendeten Elemente zusammengefaßt.

Tabelle 4-1 grepSuchmuster-Elemente

Zeichen 

Steht für 

^

Beginn einer Textzeile 

$

Ende einer Textzeile 

.

Ein beliebiges Zeichen 

[...] 

Ein beliebiges Zeichen aus der in Klammern stehenden Liste bzw. dem in Klammern stehenden Bereich 

[^...] 

Ein beliebiges Zeichen, das in der Liste oder dem Bereich nicht vorkommt 

*

Eine beliebige Anzahl des vorhergehenden Zeichens oder Ausdrucks 

.* 

Eine beliebige Anzahl eines beliebigen Zeichens 

\

Hebt die spezielle Bedeutung des nachfolgenden Zeichens auf 

Diese Elemente können Sie auch bei Suchläufen im Texteditor vi verwenden.

4.1.6 Anführungszeichen in der Befehlszeile

Wenn nach mehreren Wörtern gesucht werden soll, müssen diese in der Befehlszeile in Anführungszeichen gesetzt werden. Um in allen Dateien des aktuellen Verzeichnisses nach dem Ausdruck Preise inkl. Mehrwertsteuer" zu suchen, würden Sie also folgendes eingeben:

$ grep "Preise inkl. Mehrwertsteuer" *

Statt der doppelten können auch einfache Anführungszeichen (') verwendet werden. Damit stellen Sie gleichzeitig sicher, daß eventuell in der Zeichenfolge vorkommende Metazeichen wie normale Zeichen interpretiert werden. Das Metazeichen ! muß auch in Anführungszeichen mit einem Gegenschrägstrich entwertet werden. Um Probleme auszuschließen, sollten Sie das bei den anderen Metazeichen ebenfalls tun, wenn diese als normale Textzeichen behandelt werden sollen.

Wenn Sie folgenden Befehl eingeben, werden alle Zeilen in der Datei liste angezeigt:

$ grep $ liste

Mit dem nächsten Befehl zeigen Sie dagegen nur die Zeilen an, in denen das Zeichen $" vorkommt:

$ grep '\$' liste

Weitere Informationen zu grep(1) finden Sie in den man Pages(1): User Commands.