GREP.EXE: Das Hilfsprogramm zur Textsuche
Nach oben zu Befehlszeilenhilfsprogramme - Index
GREP (Global Regular Expression Print) ist ein leistungsfähiges Hilfsprogramm für die Textsuche, das von dem UNIX-Hilfsprogramm gleichen Namens abgeleitet ist. GREP sucht in einer oder mehreren Dateien oder im Standardeingabe-Stream nach Textmustern.
Inhaltsverzeichnis
Verwendung von GREP
Hier ist ein kurzes Beispiel einer Situation, in der GREP hilfreich ist. Angenommen, Sie wollen alle Textdateien im aktuellen Verzeichnis finden, in der die Zeichenkette Bob
enthalten ist. Sie würden Folgendes eingeben:
grep Bob *.txt
GREP gibt eine Liste mit den Zeilenangaben aller Dateien (falls vorhanden) aus, in der der String Bob
enthalten ist. Weil GREP per Voreinstellung die Groß- und Kleinschreibung beachtet, werden die Strings bob
und boB
nicht gefunden.
GREP kann aber weitaus mehr, als nur einzelne, feste Strings zu vergleichen. GREP kann nach jedem beliebigen String suchen, der einem bestimmten Muster entspricht. (Siehe den Abschnitt Der Such-String in diesem Thema.)
Befehlszeilensyntax
Die allgemeine Befehlszeilensyntax für GREP lautet:
grep [-<Optionen>] <Such-String> [<Datei(en)>...]
Befehlszeilenelemente
Option | Beschreibung |
---|---|
<Optionen> |
Besteht aus einem oder mehreren Buchstaben mit einem vorangestellten Bindestrich ( |
<Such-String> |
Enthält das Muster, nach dem gesucht werden soll. |
<Datei(en)> |
Teilt GREP mit, welche Dateien durchsucht werden sollen. Datei(en) kann ein expliziter oder ein generischer Dateiname mit den Platzhalterzeichen |
Um eine Liste der Befehlszeilenoptionen, Sonderzeichen und Voreinstellungen von GREP anzuzeigen, geben Sie folgenden Befehl ein:
grep ?
Befehlszeilenoptionen
Sie können dem Hilfsprogramm GREP in der Befehlszeile Optionen übergeben, indem Sie ein oder mehrere Zeichen mit einem vorangestellten Bindestrich (-
) angeben. Jedes Zeichen ist ein Schalter, der ein- oder ausgeschaltet werden kann: Ein Plus (+
) nach einem Zeichen aktiviert die Option; ein Minus (-
) deaktiviert sie. Das +
-Zeichen ist optional; zum Beispiel ist -r
mit -r+
identisch.
Sie können mehrere Optionen beliebig anordnen (z.B.: -i -d -l
) oder miteinander kombinieren (z.B: -ild
oder -il
, -d
usw.).
GREP unterstützt die in der folgenden Tabelle aufgeführten Befehlszeilenoptionen:
Befehlszeilenoptionen für GREP
Option | Beschreibung |
---|---|
? |
Zeigt einen Hilfebildschirm mit den Optionen, Sonderzeichen und Voreinstellungen von GREP an. |
-c- |
Nur die Anzahl ausgeben: Gibt nur die Anzahl der Zeilen mit Treffern aus. GREP gibt für jede Datei mit wenigstens einer Übereinstimmung den Dateinamen und die Anzahl der mit dem Suchtext übereinstimmenden Textstellen aus. Die Zeilen selbst werden nicht ausgegeben. |
-d- |
Unterverzeichnisse durchsuchen: GREP sucht im angegebenen Verzeichnis und allen Unterverzeichnissen davon nach allen Dateien, die mit der Dateispezifikation übereinstimmen. Wenn Sie eine Datei ohne Pfad angeben, nimmt GREP an, dass sich die Datei im aktuellen Verzeichnis befindet. |
-e |
Suchausdruck folgt: Gibt an, dass das nächste Argument als Suchausdruck verwendet wird. Diese Option eignet sich besonders für die Suche nach Ausdrücken, die mit |
-i- |
Groß-/Kleinschreibung ignorieren: GREP ignoriert die Groß-/Kleinschreibung. Wenn diese Option aktiviert ist, behandelt GREP alle Buchstaben |
-l- |
Nur Dateinamen anzeigen: Gibt nur die Namen der Dateien aus, die Übereinstimmungen mit dem Suchtext enthalten. Nachdem eine Übereinstimmung gefunden wurde, gibt GREP den Dateinamen aus und setzt umgehend mit der nächsten Datei fort. |
-n- |
Zeilennummern: GREP stellt jeder ausgegebenen Übereinstimmung die Zeilennummer voran. |
-o- |
UNIX-Ausgabeformat: Ändert das Ausgabeformat der Übereinstimmungen, um UNIX-typische Befehlszeilen-Umleitungen zu unterstützen. Allen Ausgabezeilen wird der Name der Datei vorangestellt, in der die Übereinstimmung gefunden wurde. |
-r+ |
Reguläre Ausdrücke suchen: Der im
|
-u <Dateiname> |
Optionen aktualisieren: Erstellt eine Kopie der GREP.EXE mit dem Namen |
-v- |
Keine Übereinstimmung: Gibt nur die Zeilen ohne Übereinstimmungen aus. Nur Zeilen, die den Such-String nicht enthalten, werden als Zeilen ohne Übereinstimmung behandelt. |
-w- |
Wort suchen: Text, der mit dem regulären Ausdruck übereinstimmt, wird nur als Übereinstimmung behandelt, wenn das Zeichen unmittelbar vor und nach der entsprechenden Textstelle nicht Teil eines Wortes sein kann. Der voreingestellte Wortzeichensatz enthält die Zeichen |
-z- |
Ausführlich: GREP gibt den Dateinamen jeder durchsuchten Datei aus. Jeder Übereinstimmung wird die entsprechende Zeilennummer vorangestellt. Die Anzahl der Übereinstimmungen in jeder Datei wird angezeigt, auch wenn die Anzahl Null ist. |
Der Such-String
Der Wert von <Such-String>
definiert das Muster, nach dem GREP sucht. Ein Such-String kann entweder ein regulärer Ausdruck oder ein literaler String sein.
- In einem regulären Ausdruck haben bestimmte Zeichen eine besondere Bedeutung: Sie dienen als Operatoren, die die Suche steuern. (Ein regulärer Ausdruck besteht entweder aus einem einzelnen Zeichen oder mehreren Zeichen, die in eckige Klammern eingeschlossen sind. Eine Verkettung von regulären Ausdrücken ist wieder ein regulärer Ausdruck.)
- In einem literalen String gibt es keine Operatoren: Jedes Zeichen wird buchstäblich behandelt.
Sie können den Such-String in Anführungszeichen setzen, um zu verhindern, dass Leerzeichen und Tabulatoren als Trennzeichen interpretiert werden. Verwenden Sie zum Suchen eines Ausdrucks, der mit -
beginnt, die Option -e
. Der Text, der durch den Such-String abgedeckt werden soll, darf Zeilengrenzen nicht überschreiten; d.h., dass die Textstellen, die gesucht werden sollen, sich jeweils in einer einzelnen Zeile befinden müssen.
Wenn Sie die Option -r
verwenden (standardmäßig aktiviert), wird der Such-String als regulärer Ausdruck (nicht als literaler Ausdruck) behandelt.
Sonderzeichen
Die folgenden Zeichen haben eine besondere Bedeutung:
Symbol | Beschreibung |
---|---|
^ |
Ein Zirkumflex am Anfang des Ausdrucks steht für den Zeilenanfang. |
$ |
Ein Dollarzeichen am Ende des Ausdrucks steht für das Zeilenende. |
. |
Ein Punkt steht für jedes beliebige Zeichen. |
* |
Ein Sternchen nach einem Zeichen steht für eine beliebige Anzahl von Vorkommen dieses Zeichens (einschließlich Null) gefolgt von beliebigen Zeichen. Beispiel: |
+ |
Ein Plus-Zeichen nach einem Zeichen steht für eine beliebige Anzahl von Vorkommen dieses Zeichens (größer Null) gefolgt von beliebigen Zeichen. Beispiel: |
{} |
Zeichen oder Ausdrücke in geschweiften Klammern werden so gruppiert, dass die Auswertung des Suchmusters gesteuert werden kann. Auf in dieser Weise gruppierten Text kann über eine Nummer verwiesen werden. |
[] |
Zeichen in eckigen Klammern stehen für jedes Zeichen, das in der Klammer vorkommt, aber nicht für andere Zeichen. Beispiel: |
[^] |
Ein Zirkumflex am Anfang eines Strings in eckigen Klammern bedeutet NICHT. Daher entspricht |
[-] |
Ein Bindestrich in eckigen Klammern steht für einen Zeichenbereich. Beispiel: |
\ |
Ein Backslash vor einem Platzhalterzeichen teilt GREP mit, das Zeichen buchstäblich, also nicht als Platzhalter zu interpretieren. Beispiel: |
Vier Sonderzeichen ($
, .
, *
und +
) haben keine spezielle Bedeutung innerhalb eckiger Klammern. Des Weiteren wird das Zeichen ^
nur gesondert behandelt, wenn es unmittelbar am Beginn der Zeichendefinition (unmittelbar nach dem [
-Zeichen) steht.
GREP-Beispiele
Beispiel 1 -- Umleitung der Ausgabe von GREP
Wenn die Ergebnisse von GREP länger als eine Bildschirmseite sind, können Sie die Ausgabe in eine Datei umleiten.
Sie könnten beispielsweise den folgenden Befehl verwenden:
GREP "Bob" *.txt > temp.txt
Dieser Befehl durchsucht alle Dateien im aktuellen Verzeichnis mit der Erweiterung TXT und gibt dann die Ergebnisse in der Datei TEMP.TXT aus. (Sie können der Datei einen beliebigen Namen geben.) TEMP.TXT (das Ergebnis der Suche) lässt sich in einem Textverarbeitungsprogramm öffnen.
Beispiel 2
grep -r "[^a-z]main\ *\(" *.c
Übereinstimmungen:
main(i,j:integer) if (main ()) halt; if (MAIN ()) halt;
Keine Übereinstimmungen:
mymain()
Erklärung: Der Such-String teilt GREP mit, nach dem Wort "main" ohne vorangestellte Kleinbuchstaben [^a-z]
gefolgt von keinem oder mehreren Vorkommen von Leerzeichen \ *
und einer linken, runden Klammer zu suchen. Da Leerzeichen und Tabulatorzeichen normale Trennzeichen in Befehlszeilen sind, müssen Sie sie in Anführungszeichen setzen, damit sie als Teil eines regulären Ausdrucks behandelt werden.
Beispiel 3
grep -ri [a-c]:\\data\.fil *.c *.inc
Übereinstimmungen:
A:\data.fil B:\DATA.FIL c:\Data.Fil
Keine Übereinstimmungen:
d:\data.fil a:data.fil
Erklärung: Da der Backslash (\
) und der Punkt (.
) normalerweise eine besondere Bedeutung in Pfad- und Dateinamen haben, müssen Sie das Backslash-Escape-Zeichen unmittelbar vor diesen Zeichen angeben, wenn Sie danach suchen möchten. Die Option -i
wird hier verwendet, um die Groß- und Kleinschreibung zu ignorieren.
Beispiel 4
grep "Such-String mit Leerzeichen" *.doc *.c
Übereinstimmungen:
Ein Such-String mit Leerzeichen darin.
Keine Übereinstimmungen
Dieser Such-String enthält Leerzeichen.
Erklärung: Dies ist ein Beispiel für die Suche nach einem String, der einen bestimmten Text enthält.
Beispiel 5
grep -rd "[ ,.:?'\"]"$ \*.doc
Übereinstimmungen:
Er sagte Hallo zu mir. Wo gehst Du hin? Um eine eindeutige Situation vorwegzunehmen, Die Beispiele enthalten Folgendes: "Viele Männer rauchen, aber wenige Männer kauen."
Keine Übereinstimmungen:
Er sagte "Hallo" zu mir Wo gehst Du hin? Ich gehe zu der
Erklärung: Dieses Beispiel sucht nach den Zeichen " . : ? '
und ,
jeweils am Zeilenende. Vor dem doppelten Anführungszeichen steht ein Escape-Zeichen, damit das Anführungszeichen als normales Zeichen anstatt als schließendes Anführungszeichen des Strings behandelt wird. Das Zeichen $
erscheint auch außerhalb des in Anführungszeichen gesetzten Strings. Dies zeigt, wie der reguläre Ausdruck zu einem längeren Ausdruck verkettet werden kann.
Beispiel 6
grep -w[=] = *.c
Übereinstimmungen:
i = 5; j=5; i += j;
Keine Übereinstimmungen:
if (i == t) j++; /* ==================================== */
Dieses Beispiel definiert als aktuelle Menge gültiger Zeichen für ein Wort nur den Zuweisungsoperator (=
) und führt dann eine Wortsuche aus. Die Suche liefert die C-Zuweisungsanweisungen, die ein einzelnes Gleichheitszeichen (=
) verwenden. Die Suche liefert keine Gleichheitsprüfungen, die ein doppeltes Gleichheitszeichen (==
) verwenden.