grep

Verwendung von grep (und egrep) mit regulären Ausdrücken

Verwendung von grep (und egrep) mit regulären Ausdrücken
In diesem Tutorial wird beschrieben, wie Sie beide verwenden grep (und egrep) to Text in Dateien finden, in einfacher Form und in Kombination mit regulären Ausdrücken. Es enthält mehrere Beispiele und Übungen, Plus Lösungen, für den Betrachter zu vervollständigen.

Der Name grep kommt vom ed (und vim) Befehl „g/re/p“, was bedeutet global nach einem gegebenen regulären Ausdruck suchen und die Ausgabe ausgeben (anzeigen).

Regulär Ausdrücke

Die Dienstprogramme ermöglichen es dem Benutzer, Textdateien nach Zeilen zu durchsuchen, die einem regulären Ausdruck (regexp). Ein regulärer Ausdruck ist eine Suchzeichenfolge, die aus Text und einem oder mehreren von 11 Sonderzeichen besteht. Ein einfaches Beispiel ist das Abgleichen des Anfangs einer Zeile.

Beispieldatei

Die Grundform von grep kann verwendet werden, um einfachen Text in einer oder mehreren bestimmten Dateien zu finden. Um die Beispiele auszuprobieren, erstellen Sie zuerst die Beispieldatei.

Verwenden Sie einen Editor wie nano oder vim, um den unten stehenden Text in eine Datei namens zu kopieren meine Datei.

xyz
xyzde
exyzd
dexyz
d?gxyz
xxz
xzz
x\z
x*z
xz
x z
XYZ
XYYZ
xYz
xyyz
xyyyz
xyyyyz

Obwohl Sie die Beispiele kopieren und in den Text einfügen können (beachten Sie, dass doppelte Anführungszeichen möglicherweise nicht richtig kopiert werden), müssen Befehle eingegeben werden, um sie richtig zu lernen.

Bevor Sie die Beispiele ausprobieren, sehen Sie sich die Beispieldatei an:

$ cat myfile

Einfache Suche

Um den Text 'xyz' in der Datei zu finden, führen Sie Folgendes aus:

$ grep xyz myfile

Verwenden von Farben

Um Farben anzuzeigen, verwenden Sie -color (ein doppelter Bindestrich) oder erstellen Sie einfach einen Alias. Beispielsweise:

$ grep --color xyz myfile

oder

$ alias grep='grep --color'
$ grep xyz myfile

Optionen

Gemeinsame Optionen mit dem grep Befehl enthalten:

Beispielsweise:

$ grep -i xyz myfile      # Text unabhängig von Groß-/Kleinschreibung suchen
$ grep -ic xyz myfile     # Zeilen mit Text zählen
$ grep -in xyz myfile     # Zeilennummern anzeigen

Mehrere Dateien erstellen

Bevor Sie versuchen, mehrere Dateien zu durchsuchen, erstellen Sie zunächst mehrere neue Dateien:

$ echo xyz>myfile1
$ echo -e „xyz\nxzz\nXYZ“>meinedatei2
$ echo -e „xxx\nyyy“>meinedatei3
$ cat myfile1
$ cat myfile2
$ cat myfile3

Mehrere Dateien durchsuchen

Um mehrere Dateien mit Dateinamen oder einem Platzhalter zu durchsuchen, geben Sie Folgendes ein:

$ grep -ic xyz myfile myfile1 myfile2 myfile3
$ grep -in xyz my* 
# Übereinstimmung mit Dateinamen, die mit 'my' beginnen

Übung I

  1. Zählen Sie zuerst, wie viele Zeilen sich in der Datei /etc/passwd befinden.
Hinweis: Verwenden Sie wc -l /etc/passwd
  1. Finde jetzt alle Vorkommen des Textes var in der Datei /etc/passwd.
  2. Finden Sie heraus, wie viele Zeilen in der Datei den Text enthalten
  3. Finden Sie heraus, wie viele Zeilen den Text NICHT enthalten var.
  4. Den Eintrag für Ihr Login finden Sie im /etc/passwd

Übungslösungen finden Sie am Ende dieses Artikels.

Reguläre Ausdrücke verwenden

Der Befehl grep kann auch mit regulären Ausdrücken verwendet werden, indem eines oder mehrere von elf Sonderzeichen oder Symbolen verwendet werden, um die Suche zu verfeinern. Ein regulärer Ausdruck ist eine Zeichenfolge, die Sonderzeichen enthält, um einen Mustervergleich innerhalb von Dienstprogrammen zu ermöglichen, wie z grep, vim und sed. Beachten Sie, dass die Zeichenfolgen möglicherweise in Anführungszeichen eingeschlossen werden müssen.

Zu den verfügbaren Sonderzeichen gehören:

^ Beginn einer Zeile
$ Ende einer Zeile
. Beliebiges Zeichen (außer \n Zeilenumbruch)
* 0 oder mehr des vorherigen Ausdrucks
\ Das Voranstellen eines Symbols macht es zu einem wörtlichen Zeichen

Beachten Sie, dass das *, das in der Befehlszeile verwendet werden kann, um eine beliebige Anzahl von Zeichen (einschließlich keinem) zu finden, ist nicht hier gleich verwendet.

Beachten Sie auch die Verwendung von Anführungszeichen in den folgenden Beispielen.

Beispiele

Um alle Zeilen zu finden, die mit Text beginnen, verwenden Sie das Zeichen ^:

$ grep '^xyz' meine Datei

So finden Sie alle Zeilen, die mit Text mit dem Zeichen $ enden:

$ grep 'xyz$' meine Datei

So suchen Sie nach Zeilen, die eine Zeichenfolge mit den Zeichen ^ und $ enthalten:

$ grep '^xyz$' meine Datei

So finden Sie Zeilen mit dem . um einem beliebigen Zeichen zu entsprechen:

$ grep '^x.z' meine Datei

Um Zeilen zu finden, die das * verwenden, um 0 oder mehr des vorherigen Ausdrucks zu entsprechen:

$ grep '^xy*z' meine Datei

Um Linien zu finden mit .* um 0 oder mehr eines beliebigen Zeichens zu entsprechen:

$ grep '^x.*z' meine Datei

So finden Sie Zeilen mit dem \ um das *-Zeichen zu entkommen:

$ grep '^x\*z' meine Datei

Um das Zeichen \ zu finden, verwenden Sie:

$ grep '\\' meine Datei

Ausdruck grep - egrep

Das grep Befehl unterstützt nur eine Teilmenge der verfügbaren regulären Ausdrücke. Allerdings ist der Befehl egrep:

Beachten Sie, dass die Ausdrücke in Anführungszeichen eingeschlossen werden müssen.

Um Farben zu verwenden, verwenden Sie -color oder erstellen Sie erneut einen Alias:

$ alias egrep='egrep --color'

Um nach mehr als einem zu suchen regex das egrep Befehl kann über mehrere Zeilen geschrieben werden. Dies kann jedoch auch mit diesen Sonderzeichen erfolgen:

| Abwechslung, entweder das eine oder das andere
(…) Logische Gruppierung eines Teils eines Ausdrucks
$ egrep '(^root|^uucp|^mail)' /etc/passwd

Dadurch werden die Zeilen, die mit root, uucp oder mail beginnen, aus der Datei extrahiert, das | Symbol bedeutet eine der Optionen.

Der folgende Befehl wird nicht funktionieren, obwohl keine Meldung angezeigt wird, da die Basis grep Befehl unterstützt nicht alle regulären Ausdrücke:

$ grep '(^root|^uucp|^mail)' /etc/passwd

Auf den meisten Linux-Systemen ist jedoch der Befehl grep -E ist das gleiche wie verwenden egrep:

$ grep -E '(^root|^uucp|^mail)' /etc/passwd

Verwenden von Filtern

Rohrleitungen ist der Vorgang, bei dem die Ausgabe eines Befehls als Eingabe in einen anderen Befehl gesendet wird und ist eines der mächtigsten verfügbaren Linux-Tools.

Befehle, die in einer Pipeline erscheinen, werden oft als Filter bezeichnet, da sie in vielen Fällen die an sie übergebene Eingabe durchsuchen oder ändern, bevor sie den geänderten Stream an die Standardausgabe senden.

Im folgenden Beispiel wird die Standardausgabe von ls -l wird als Standardeingabe an die . übergeben grep Befehl. Ausgabe aus dem grep Befehl wird dann als Eingabe an den Mehr Befehl.

Dadurch werden nur Verzeichnisse angezeigt in /usw:

$ ls -l /etc|grep '^d'|more

Die folgenden Befehle sind Beispiele für die Verwendung von Filtern:

$ ps -ef|grep cron

$ who|grep kdm

Beispieldatei

Um die Überprüfungsübung auszuprobieren, erstellen Sie zunächst die folgende Beispieldatei.

Verwenden Sie einen Editor wie nano oder vim, um den folgenden Text in eine Datei namens file zu kopieren Menschen:

Persönlich       J.Schmied       25000
Persönlich       E.Schmied       25400
Schulung       A.Braun       27500
Schulung       C.Braun      23400
(Administrator)        R.Bron        30500
Warenausgang      T.Smyth       30000
Persönlich       F.Jones       25000
Schulung*      C.Evans       25500
Warenausgang      W.Papst        30400
Erdgeschoss  T.Smythe      30500
Persönlich       J.Maler       33000

Übung II

  1. Datei anzeigen Menschen und den Inhalt prüfen its.
  2. Finde alle Zeilen, die die Zeichenfolge enthalten Schmied in der Datei Leute.Hinweis: Verwenden Sie den Befehl grep, aber denken Sie daran, dass standardmäßig die Groß-/Kleinschreibung beachtet wird.
  3. Erstellen Sie eine neue Datei, npeople, die alle Zeilen enthält, die mit der Zeichenfolge beginnen persönlich in der Personendatei.Hinweis: Verwenden Sie den Befehl grep mit >.
  4. Bestätigen Sie den Inhalt der Datei npeople, indem Sie die Datei auflisten.
  5. Hängen Sie nun alle Zeilen an, wo der Text endet mit der Zeichenfolge 500 in der Datei people in die Datei npeople.Hinweis: Verwenden Sie den Befehl grep mit >>.
  6. Bestätigen Sie erneut den Inhalt der Datei npeople, indem Sie die Datei auflisten.
  7. Finden Sie die IP-Adresse des Servers, die in der Datei gespeichert ist /etc/hosts.Hinweis: Verwenden Sie den Befehl grep mit $(hostname)
  8. Benutzen egrep aus dem herausziehen /etc/passwd Dateikontozeilen mit lp oder deine eigene Benutzeridentifikation.

Übungslösungen finden Sie am Ende dieses Artikels.

Weitere reguläre Ausdrücke

Ein regulärer Ausdruck kann man sich bei Steroiden als Platzhalter vorstellen.

Es gibt elf Zeichen mit besonderen Bedeutungen: die öffnenden und schließenden eckigen Klammern [ ], der Backslash \, das Caret ^, das Dollarzeichen $, der Punkt oder Punkt ., der vertikale Balken oder das Pipe-Symbol |, das Fragezeichen ?, das Sternchen oder Stern *, das Pluszeichen + und die öffnende und schließende runde Klammer . Diese Sonderzeichen werden oft auch Metazeichen genannt.

Hier ist der vollständige Satz von Sonderzeichen:

^ Beginn einer Zeile
$ Ende einer Zeile
. Beliebiges Zeichen (außer \n Zeilenumbruch)
* 0 oder mehr des vorherigen Ausdrucks
| Abwechslung, entweder das eine oder das andere
[…] Expliziter Zeichensatz zum Abgleichen
+ 1 oder mehr des vorherigen Ausdrucks
? 0 oder 1 des vorherigen Ausdrucks
\ Das Voranstellen eines Symbols macht es zu einem wörtlichen Zeichen
Explizite Quantorennotation
(…) Logische Gruppierung eines Teils eines Ausdrucks

Die Standardversion von grep hat nur begrenzte Unterstützung für reguläre Ausdrücke. Damit alle folgenden Beispiele funktionieren, verwenden Sie egrep stattdessen oder grep -E.

So finden Sie Zeilen mit dem | um einen der Ausdrücke zu entsprechen:

$ egrep 'xxz|xzz' meine Datei

Zeilen finden mit | Um einen der Ausdrücke innerhalb einer Zeichenfolge zu finden, verwenden Sie auch ( ):

$ egrep '^x(Yz|yz)' meine Datei

So finden Sie mit [ ] Zeilen, die einem beliebigen Zeichen entsprechen:

$ egrep '^x[Yy]z' meine Datei

So suchen Sie mit [ ] Zeilen, die KEINE Zeichen enthalten:

$ egrep '^x[^Yy]z' meine Datei

Um Zeilen zu finden, die das * verwenden, um 0 oder mehr des vorherigen Ausdrucks zu entsprechen:

$ egrep '^xy*z' meine Datei

So suchen Sie mit + nach Zeilen, die einem oder mehreren des vorherigen Ausdrucks entsprechen:

$ egrep '^xy+z' meine Datei

So finden Sie Zeilen mit dem ? um 0 oder 1 des vorherigen Ausdrucks zu entsprechen:

$ egrep '^xy?z' meine Datei

Übung III

  1. Finde alle Zeilen mit den Namen Evans oder Maler in der Datei Leute.
  2. Finde alle Zeilen mit den Namen Smith, Smith oder Smythe in der Datei Leute.
  3. Finde alle Zeilen mit den Namen Brown, Brown oder Bron in der Datei Leute.Wenn du Zeit hast:
  4. Suchen Sie die Zeile mit der Zeichenfolge (Administrator), einschließlich der Klammern, in der Datei Leute.
  5. Suchen Sie die Zeile mit dem Zeichen * in der Datei people.
  6. Kombiniere 5 und 6 oben, um beide Ausdrücke zu finden.

Mehr Beispiele

Um Linien zu finden mit . und * für eine beliebige Zeichenfolge:

$ egrep '^xy.*z' meine Datei

So finden Sie mit Zeilen, die mit N Zeichen übereinstimmen:

$ egrep '^xy3z' meine Datei
$ egrep '^xy4z' meine Datei

So finden Sie mit Zeilen, die N oder öfter entsprechen:

$ egrep '^xy3,z' meine Datei

So finden Sie mit Zeilen, die N-mal, aber nicht mehr als M-mal übereinstimmen:

$ egrep '^xy2,3z' meine Datei

Fazit

In diesem Tutorial haben wir uns zuerst mit der Verwendung von grep in seiner einfachen Form, um Text in einer Datei oder in mehreren Dateien zu finden. Den zu suchenden Text haben wir dann mit einfachen regulären Ausdrücken kombiniert und dann mit komplexeren mit egrep.

Nächste Schritte

Ich hoffe, Sie werden das hier gewonnene Wissen gut nutzen. Ausprobieren grep Befehle auf Ihre eigenen Daten und denken Sie daran, reguläre Ausdrücke wie hier beschrieben können in der gleichen Form verwendet werden in vi, sed und awk!

Übungslösungen

Übung I

Zählen Sie zuerst, wie viele Zeilen die Datei enthält /etc/passwd.
$ wc -l /etc/passwd
Finden Sie nun alle Vorkommen des Textes var in der Datei /etc/passwd.
$ grep var /etc/passwd
Finden Sie heraus, wie viele Zeilen in der Datei den Text enthalten var

grep -c var /etc/passwd

Finden Sie heraus, wie viele Zeilen den Text NICHT enthalten var.

grep -cv var /etc/passwd

Den Eintrag für Ihr Login finden Sie im /etc/passwd Datei
grep kdm /etc/passwd

Übung II

Datei anzeigen Menschen und den Inhalt prüfen its.
$ Katzenmenschen
Finde alle Zeilen, die die Zeichenfolge enthalten Schmied in der Datei Menschen.
$ grep 'Smith' Leute
Erstellen Sie eine neue Datei, nleute, enthält alle Zeilen, die mit der Zeichenfolge beginnen persönlich in dem Menschen Datei
$ grep '^Persönliche' Leute> nMenschen
Bestätigen Sie den Inhalt der Datei nleute indem Sie die Datei auflisten.
$ Katze npeople
Hängen Sie nun alle Zeilen an, wo der Text endet mit der Zeichenfolge 500 in der Datei Menschen zur Datei nleute.
$ grep '500$' Leute>>nLeute
Bestätigen Sie erneut den Inhalt der Datei nleute indem Sie die Datei auflisten.
$ Katze npeople
Finden Sie die IP-Adresse des Servers, die in der Datei gespeichert ist /etc/hosts.
$ grep $(Hostname) /etc/hosts
Benutzen egrep aus dem herausziehen /etc/passwd Dateikontozeilen mit lp oder Ihre eigene Benutzerkennung.
$ egrep '(lp|kdm:)' /etc/passwd

Übung III

Finde alle Zeilen mit den Namen Evans oder Maler in der Datei Menschen.
$ egrep 'Evans|Maler' Leute
Finde alle Zeilen mit den Namen Schmied, Smyth oder Smythe in der Datei Menschen.
$ egrep 'Sm(i|y)the?' Menschen
Finde alle Zeilen mit den Namen Braun, Browen oder Bron in der Datei Leute.
$ egrep 'Brauen?e?n' Leute
Suchen Sie die Zeile mit der Zeichenfolge (Administrator), einschließlich der Klammern, in der Datei Menschen.

$ egrep '\(Admin\)' Leute

Suchen Sie die Zeile mit dem Zeichen * in der Datei Leute.
$ egrep '\*' Leute
Kombiniere 5 und 6 oben, um beide Ausdrücke zu finden.

$ egrep '\(Admin\)|\*' Leute


So zeigen Sie den FPS-Zähler in Linux-Spielen an
Linux-Gaming bekam einen großen Schub, als Valve 2012 die Linux-Unterstützung für den Steam-Client und seine Spiele ankündigte. Seitdem haben viele AA...
Herunterladen und Spielen von Sid Meier's Civilization VI unter Linux and
Einführung in das Spiel Civilization 6 ist eine moderne Version des klassischen Konzepts, das in der Reihe der Age of Empires-Spiele eingeführt wurde....
So installieren und spielen Sie Doom unter Linux
Einführung in Doom Die Doom-Serie entstand in den 90er Jahren nach der Veröffentlichung des ursprünglichen Doom. Es war sofort ein Hit und seitdem hat...