GREP.EXE: Das Hilfsprogramm zur Textsuche

Aus RAD Studio
Wechseln zu: Navigation, Suche

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.

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 (-), die die Arbeitsweise von GREP beeinflussen.

<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 ? und * sein. Sie können auch einen Pfad (mit Laufwerk und Verzeichnis) eingeben. Wenn Sie Dateien ohne einen Pfad aufführen, durchsucht GREP das aktuelle Verzeichnis.
Wenn Sie keine Datei angeben, durchsucht GREP die Standardeingabe; so können Sie Pipes (vertikale Linie |) und Umleitungen (Symbol "größer als" >) verwenden.


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.
Diese Option ist standardmäßig deaktiviert.

-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.
Diese Option ist standardmäßig deaktiviert.

-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 - beginnen.

-i-

Groß-/Kleinschreibung ignorieren: GREP ignoriert die Groß-/Kleinschreibung. Wenn diese Option aktiviert ist, behandelt GREP alle Buchstaben a bis z genauso wie ihre Entsprechungen A bis Z.
Diese Option ist standardmäßig deaktiviert.

-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.
Diese Option ist standardmäßig deaktiviert.

-n-

Zeilennummern: GREP stellt jeder ausgegebenen Übereinstimmung die Zeilennummer voran.
Diese Option ist standardmäßig deaktiviert.

-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.
Diese Option ist standardmäßig deaktiviert.

-r+

Reguläre Ausdrücke suchen: Der im Such-String definierte Text wird als regulärer Ausdruck und nicht als literaler String behandelt.
Diese Option ist standardmäßig aktiviert.
Ein regulärer Ausdruck besteht aus einem oder mehreren Vorkommen von einem oder mehreren Zeichen, die optional in Anführungszeichen gesetzt sind.
Die folgenden Symbole werden gesondert behandelt (für weitere Informationen siehe den Abschnitt Sonderzeichen in diesem Thema):

  • ^ -- Zeilenanfang
  • . -- beliebiges Zeichen
  • * -- keine oder mehrere Übereinstimmungen
  • [aeiou0-9] -- Übereinstimmung von a, e, i, o, u, und 0-9
  • [^aeiou0-9] -- alle Übereinstimmungen außer a, e, i, o, u, und 0-9
  • $ -- Zeilenende
  • \ -- nächstes Zeichen buchstäblich nehmen
  • + -- eine oder mehrere Übereinstimmungen
-u <Dateiname>

Optionen aktualisieren: Erstellt eine Kopie der GREP.EXE mit dem Namen <Dateiname>.EXE. Alle in der Befehlszeile enthaltenen Optionen werden als Voreinstellungen in der Kopie von GREP gespeichert. Mit der Option -u können Sie die Voreinstellungen anpassen. Um die Voreinstellungen zu überprüfen, geben Sie
Dateiname ?
ein. Im Hilfebildschirm folgt jeder Option ein + oder ein -, je nach Voreinstellung der Option.

-v-

Keine Übereinstimmung: Gibt nur die Zeilen ohne Übereinstimmungen aus. Nur Zeilen, die den Such-String nicht enthalten, werden als Zeilen ohne Übereinstimmung behandelt.
Diese Option ist standardmäßig deaktiviert.

-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 A bis Z, 0 bis 9 und den Unterstrich _.
Diese Option ist standardmäßig deaktiviert.
Mit einer alternativen Form dieser Option können Sie den Satz der gültigen Wortzeichen ändern. Die Form lautet: -w[Satz], wobei Satz jeder gültige reguläre Ausdruck sein kann.
Wenn Sie den Satz mit Buchstaben definieren, ist automatisch sowohl der Groß- als auch der Kleinbuchstabe jedes Zeichens eingeschlossen, unabhängig davon, wie Sie sie eingegeben haben, sogar wenn bei der Suche zwischen Groß- und Kleinbuchstaben unterschieden wird.
Wenn Sie die Option -w in Verbindung mit der Option -u verwenden, wird der neue Satz der gültigen Zeichen als Voreinstellung gespeichert.

-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.
Diese Option ist standardmäßig deaktiviert.

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: bo* entspricht bot, boo, aber auch bo.

+

Ein Plus-Zeichen nach einem Zeichen steht für eine beliebige Anzahl von Vorkommen dieses Zeichens (größer Null) gefolgt von beliebigen Zeichen. Beispiel: bo+ entspricht bot und boo, aber nicht b, bo oder bt.

{}

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: [bot] entspricht b, o oder t.

[^]

Ein Zirkumflex am Anfang eines Strings in eckigen Klammern bedeutet NICHT. Daher entspricht [^bot] allen Zeichen außer b, o oder t.

[-]

Ein Bindestrich in eckigen Klammern steht für einen Zeichenbereich. Beispiel: [b-o] entspricht allen Zeichen von b bis o.

\

Ein Backslash vor einem Platzhalterzeichen teilt GREP mit, das Zeichen buchstäblich, also nicht als Platzhalter zu interpretieren. Beispiel: \^ entspricht ^ und sucht nicht nach dem Zeilenanfang.


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.

Siehe auch