Anwendungsbeispiele des Linux-Befehls grep
Der Linux-Befehl grep wird als Methode zum Filtern von Eingaben verwendet. GREP steht für Global Regular Expression Printer. Um es effektiv nutzen zu können, sollten Sie daher einige Kenntnisse über reguläre Ausdrücke haben.
In diesem Artikel lernen Sie eine Reihe von Beispielen kennen, die Ihnen helfen, den grep-Befehl zu verstehen.
So suchen Sie mit GREP nach einem String in einer Datei

Stellen Sie sich vor, Sie haben eine Textdatei namens books mit den folgenden Kinderbuchtiteln:
- Robin Hood
- Rotkäppchen
- Peter Pan
- Goldlöckchen und die drei Bären
- Schneewittchen und die sieben Zwerge
- Pinnochio
- Die Katze im Hut
- Die drei kleinen Schweine
- Der Grüffelo
- Charlie und die Schokoladenfabrik
Um alle Bücher mit dem Wort "The" im Titel zu finden, verwenden Sie die folgende Syntax:
grep Die Bücher.
Die folgenden Ergebnisse werden zurückgegeben:
Goldlöckchen und die drei Bären
Schneewittchen und die sieben Zwerge
Die Katze im Hut
Die drei kleinen Schweine
Der Grüffelo
Charlie und die Schokoladenfabrik.
In jedem Fall wird das Wort "The" hervorgehoben.
Bei der Suche wird die Groß-/Kleinschreibung beachtet, wenn also einer der Titel "the" anstelle von "The" hätte, wäre er nicht zurückgegeben worden.
Um den Fall zu ignorieren, können Sie den folgenden Schalter hinzufügen:
grep die Bücher --ignore-case.
Sie können den Schalter -i auch wie folgt verwenden:
grep - ich die Bücher.
Suchen nach einem String in einer Datei mit regulären Ausdrücken
Der grep-Befehl ist sehr mächtig. Sie können eine Vielzahl von Mustervergleichstechniken verwenden, um die Ergebnisse zu filtern.
In diesem Beispiel zeigen wir Ihnen, wie Sie mithilfe von Platzhaltern nach einem String in einer Datei suchen.
Stellen Sie sich vor, Sie haben eine Datei namens Orte mit den folgenden schottischen Ortsnamen:
aberdeen
aberystwyth
aberlour
inverurie
inverness
neuburgh
neues Reh
neuer Galloway
Glasgow
edinburg.
Wenn Sie alle Orte mit inver im Namen finden möchten, verwenden Sie die folgende Syntax:
grep inver* Orte.
Das Sternchen (*) funktioniert nicht ganz wie in der normalen Bash. Im Kontext von grep, das sich mit regulären Ausdrücken beschäftigt, verhält sich das Sternchen anders. Anstatt irgendwelche oder keine Zeichen zu finden, wie es Bash ist, entspricht es dem eingegebenen Muster plus irgendwelchen oder keinen nachfolgenden Wiederholungen dieses Musters.
Im obigen Beispiel stimmt es überein:
inverurie
inverness.
weil sie beide das eingegebene Muster "inver" plus null zusätzliche Wiederholungen dieses Musters enthalten. Um dies noch einmal deutlicher zu sehen, fügen Sie hinzu:
wiederholeninverinverinver.
zur Liste. Nein, es macht nicht viel Sinn, aber es wird zeigen, wie das Sternchen funktioniert. Versuchen Sie, den Befehl erneut auszuführen.
grep inver* Orte.
Sehen Sie die neue Linie? Das würde in Bash nicht funktionieren, aber hier funktioniert es.
Um die Dinge noch seltsamer zu machen, führen Sie den Befehl ohne das Sternchen aus.
grep inver Orte.
Die Ergebnisse sind die gleichen. Standardmäßig sucht grep an jeder Stelle, an der es in einer Textfolge erscheint, nach einem Muster. Es macht auch keinen Unterschied, wie oft es erscheint.
Ein weiterer Platzhalter, den Sie verwenden können, ist der Punkt (.). Sie können dies verwenden, um einen einzelnen Buchstaben zuzuordnen.
grep inver.r Plätze.
Der obige Befehl würde Orte namens inverurie und inverary finden, aber nicht invereerie, da zwischen den beiden r nur ein Platzhalter stehen kann, wie durch den einzelnen Punkt angegeben.
Der Platzhalter für einen Punkt ist nützlich, kann jedoch zu Problemen führen, wenn Sie ihn als Teil des gesuchten Textes verwenden.
Sehen Sie sich beispielsweise diese Liste der Domänennamen an.
- linux.lifewire.com
- pcsupport.lifewire.com
- mp3.lifewire.com
- minecraft.lifewire.com
- androidgames.lifewire.com
- netforbeginners.lifewire.com
- alltagslinuxuser.com
- google.de
- google.au
- direct.gov.uk
- fakesite.lifewire1com.com
Um alle lifewire.com-URLs zu finden, können Sie einfach mit der folgenden Syntax suchen:
grep .com-Domainnamen.
Der obige Befehl würde fallen, wenn die Liste den folgenden Namen enthält:
dailylinuxuser.com.
Versuchen Sie daher die folgende Syntax:
grep lifewire.com-Domainnamen.
Dies würde in Ordnung funktionieren, es sei denn, es gäbe eine Domain mit dem folgenden Namen:
fakesite.lifewire1com.com.
Um wirklich nach dem Begriff lifewire.com zu suchen, müssen Sie den Punkt wie folgt umgehen:
grep lifewire\\.com-Domainnamen.
Der letzte Platzhalter, der Ihnen angezeigt wird, ist das Fragezeichen, das für null oder ein Zeichen steht.
Zum Beispiel:
grep -E ?ber Ortsnamen.
Der obige Befehl würde aberdeen, aberystwyth oder sogar berwick zurückgeben, wenn er auf der Liste wäre. Beachten Sie auch das zusätzliche '-E'-Flag. Grep wird das nicht erkennen? Zeichen, ohne dass es erweiterte Unterstützung für reguläre Ausdrücke aktiviert.
Suche nach Strings am Anfang und Ende der Zeile mit grep
Mit dem Karat (^) und dem Dollar ($) Symbol können Sie nach Mustern am Zeilenanfang und Zeilenende suchen.
Stellen Sie sich vor, Sie haben eine Datei namens Fußball mit den folgenden Teamnamen:
- Blackpool
- Liverpool
- Manchester City
- Leicester-Stadt
- Manchester United
- Newcastle United
- FC United of Manchester
Wenn Sie alle Teams finden möchten, die mit Manchester beginnen, verwenden Sie die folgende Syntax:
grep ^Manchester-Teams.
Der obige Befehl würde Manchester City und Manchester United zurückgeben, aber nicht FC United Of Manchester.
Alternativ können Sie alle Teams finden, die auf United enden, indem Sie die folgende Syntax verwenden:
grep United$-Teams.
Der obige Befehl würde zu Manchester United und Newcastle United zurückkehren, aber nicht zu FC United of Manchester.
Zählen der Anzahl der Übereinstimmungen mit grep
Wenn Sie mit grep nicht die tatsächlichen Zeilen zurückgeben möchten, die einem Muster entsprechen, sondern nur wissen möchten, wie viele es sind, können Sie die folgende Syntax verwenden:
grep -c Mustereingabedatei.
Wenn das Muster zweimal gefunden wurde, würde die Zahl 2 zurückgegeben.
Finden aller nicht übereinstimmenden Begriffe mit grep
Stellen Sie sich vor, Sie haben eine Liste von Ortsnamen mit den folgenden Ländern:
- aberdeen Schottland
- Glasgow Schottland
- Liverpool England
- Colwyn Bay
- London, England
Sie haben vielleicht bemerkt, dass mit Colwyn Bay kein Land verbunden ist.
Um nach allen Orten mit einem Land zu suchen, können Sie die folgende Syntax verwenden:
grep land$ Plätze.
Die Ergebnisrückgabe wäre alle Orte außer Colwyn Bay.
Dies funktioniert offensichtlich nur für Orte, die auf Land enden (kaum wissenschaftlich).
Sie können die Auswahl mit der folgenden Syntax invertieren:
grep -v land$ Orte.
Dies würde alle Orte finden, die nicht mit Land enden.
So finden Sie leere Zeilen in Dateien mit grep
Stellen Sie sich vor, Sie haben eine Eingabedatei, die von einer Drittanbieteranwendung verwendet wird, die das Lesen der Datei stoppt, wenn eine leere Zeile wie folgt gefunden wird:
- aberdeen schottland
- inverness schottland
- Liverpool England
- colwyn bay wales
Wenn die Anwendung die Zeile nach Liverpool erreicht, wird sie nicht mehr gelesen, was bedeutet, dass Colwyn Bay vollständig übersehen wird.
Sie können grep verwenden, um mit der folgenden Syntax nach Leerzeilen zu suchen:
grep ^$ Orte.
Dies ist nicht besonders nützlich, da es nur die Leerzeilen zurückgibt.
Sie können natürlich die Anzahl der Leerzeilen zur Überprüfung der Gültigkeit der Datei wie folgt ermitteln:
grep -c ^$ Orte.
Es wäre jedoch nützlicher, die Zeilennummern mit Leerzeilen zu kennen, damit Sie sie ersetzen können. Dies können Sie mit dem folgenden Befehl tun:
grep -n ^$ Orte.
So suchen Sie mit grep nach Zeichenfolgen aus Groß- oder Kleinbuchstaben
Mit grep können Sie anhand der folgenden Syntax bestimmen, welche Zeilen in einer Datei Großbuchstaben enthalten:
grep '[A-Z]' Dateiname.
Mit den eckigen Klammern [] bestimmen Sie den Zeichenbereich. Im obigen Beispiel stimmt es mit jedem Zeichen überein, das zwischen A und Z liegt.
Um Kleinbuchstaben abzugleichen, können Sie daher die folgende Syntax verwenden:
grep '[a-z]' Dateiname.
Wenn Sie nur Buchstaben und keine Zahlen oder andere Symbole zuordnen möchten, können Sie die folgende Syntax verwenden:
grep '[a-zA-Z]' Dateiname.
Dasselbe können Sie mit Zahlen wie folgt machen:
grep '[0-9]' Dateiname.
Auf der Suche nach sich wiederholenden Mustern mit grep
Sie können geschweifte Klammern {} verwenden, um nach einem sich wiederholenden Muster zu suchen.
Stellen Sie sich vor, Sie haben eine Datei mit Telefonnummern wie folgt:
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
Sie wissen, dass der erste Teil der Zahl dreistellig sein muss und Sie möchten die Zeilen finden, die diesem Muster nicht entsprechen.
Aus dem vorherigen Beispiel wissen Sie, dass [0-9] alle Zahlen in einer Datei zurückgibt.
In diesem Fall möchten wir die Zeilen, die mit drei Zahlen beginnen, gefolgt von einem Bindestrich (-). Sie können dies mit der folgenden Syntax tun:
grep "^[0-9][0-9][0-9]-" Zahlen.
Wie wir aus vorherigen Beispielen wissen, bedeutet das Karat (^), dass die Zeile mit dem folgenden Muster beginnen muss.
[0-9] sucht nach einer beliebigen Zahl zwischen 0 und 9. Da diese dreimal enthalten ist, entspricht sie 3 Zahlen. Schließlich gibt es einen Bindestrich, der angibt, dass den drei Zahlen ein Bindestrich folgen muss.
Mit den geschweiften Klammern können Sie die Suche wie folgt verkleinern:
grep "^[0-9]\{3\}-" Zahlen.
Der Schrägstrich maskiert die {-Klammer, sodass er als Teil des regulären Ausdrucks funktioniert, aber im Wesentlichen bedeutet dies [0-9]{3}, was eine beliebige Zahl zwischen 0 und 9 dreimal bedeutet.
Die geschweiften Klammern können auch wie folgt verwendet werden:
{5,10}
{5,}
Die {5,10} bedeutet, dass das gesuchte Zeichen mindestens 5 Mal wiederholt werden muss, jedoch nicht mehr als 10 wobei {5,} bedeutet, dass das Zeichen mindestens 5 Mal wiederholt werden muss, aber mehr als das.
Verwenden der Ausgabe anderer Befehle Verwenden von grep
Bisher haben wir uns den Mustervergleich innerhalb einzelner Dateien angesehen, aber grep kann die Ausgabe anderer Befehle als Eingabe für den Mustervergleich verwenden.
Ein gutes Beispiel dafür ist die Verwendung des Befehls ps, der aktive Prozesse auflistet.
Führen Sie beispielsweise den folgenden Befehl aus:
ps-ef.
Alle laufenden Prozesse auf Ihrem System werden angezeigt.
Sie können grep verwenden, um nach einem bestimmten laufenden Prozess wie folgt zu suchen:
ps -ef | grep Firefox.
Zusammenfassung
Der grep-Befehl ist ein grundlegendes Linux Befehl und es lohnt sich, es zu erlernen, da es Ihnen das Leben bei der Suche nach Dateien und Prozessen bei der Verwendung des Terminals erheblich erleichtert.