grep

Suchen von Strings in Textdateien mit grep mit regulärem Ausdruck

Suchen von Strings in Textdateien mit grep mit regulärem Ausdruck
grep ist eines der beliebtesten Tools zum Suchen und Finden von Zeichenfolgen in einer Textdatei. Der Name 'grep' leitet sich von einem Befehl im mittlerweile veralteten Unix-ed-Line-Editor-Tool ab – dem ed-Befehl für die Suche global durch eine Datei für a regulären Ausdruck und dann Drucken diese Zeilen waren g/re/p, wo re war der reguläre Ausdruck, den Sie verwenden würden. Schließlich wurde der Befehl grep geschrieben, um diese Suche in einer Datei durchzuführen, wenn ed . nicht verwendet wird.

In diesem Artikel zeigen wir Ihnen, wie Sie eine erweiterte String-Suche mit Grep mit regulären Ausdrücken ausführen, indem wir Ihnen 10 praktische Beispiele zu deren Implementierungen geben. Viele in diesem Artikel besprochene Beispiele haben praktische Implikationen, was bedeutet, dass Sie sie in Ihrer täglichen Linux-Programmierung verwenden können. Die folgenden Beispiele beschreiben einige Regexp-Beispiele für häufig gesuchte Muster.

Beispiel 1: Suchen Sie einen einzelnen Charterer in einer Textdatei

Um Zeilen in der Datei 'book' auszugeben, die ein '$'-Zeichen enthalten, geben Sie Folgendes ein:

$ grep '\$' Buch

Beispiel 2: Suchen Sie einen einzelnen String in einer Textdatei

Um Zeilen in der Datei 'book' auszugeben, die die Zeichenfolge '$14 . enthält.99', Typ:

$ grep '\$14\.99' Buch

Bsp. 3: In einer Textdatei einen einzelnen Sondercharterer finden

Um Zeilen in der Datei 'book' auszugeben, die ein '\'-Zeichen enthalten, geben Sie Folgendes ein:

$ grep '\\' Buch

Bsp. 4: Passende Zeilen, die mit einem bestimmten Text beginnen

Verwenden Sie 'ˆ' in einem Regexp, um den Anfang einer Zeile zu kennzeichnen.

Um alle Zeilen in '/usr/dict/words' auszugeben, die mit 'pro' beginnen, geben Sie Folgendes ein:

$ grep 'ˆpro' /usr/dict/words

Um alle Zeilen in der Datei 'book' auszugeben, die mit dem Text 'am Anfang' beginnen, unabhängig von der Groß-/Kleinschreibung, geben Sie Folgendes ein:

$ grep -i 'ˆam Anfang' Buch

HINWEIS: Diese Regexps wurden in Anführungszeichen gesetzt; Dies liegt daran, dass einige Shells das 'ˆ'-Zeichen ansonsten als spezielles „Metazeichen“ behandeln

Zusätzlich zur Wort- und Phrasensuche können Sie mit grep nach komplexen Textmustern suchen, die als reguläre Ausdrücke bezeichnet werden expression. Ein regulärer Ausdruck – oder „regexp“ – ist eine Textzeichenfolge aus Sonderzeichen, die a . angibt einstellen von passenden Mustern.

Technisch gesehen sind die Wort- oder Phrasenmuster reguläre Ausdrücke – nur sehr einfache. In einem regulären Ausdruck repräsentieren die meisten Zeichen – einschließlich Buchstaben und Zahlen – sich selbst. Zum Beispiel das Regexp-Muster 1 entspricht der Zeichenfolge '1' und dem Muster Junge stimmt mit der Zeichenfolge 'junge' überein.

Es gibt eine Reihe von reservierten Zeichen, die als Metazeichen bezeichnet werden und die sich selbst nicht in einem regulären Ausdruck darstellen, aber eine besondere Bedeutung haben, die verwendet wird, um komplexe Muster zu erstellen. Diese Metazeichen lauten wie folgt: ., *, [, ], ˆ, $ und \. Es ist gut anzumerken, dass solche Metazeichen bei fast allen gängigen und speziellen Linux-Distributionen üblich sind. Hier ist ein guter Artikel, der spezielle Bedeutungen der Metazeichen behandelt und Beispiele für ihre Verwendung gibt.

Beispiel 5: Übereinstimmende Zeilen, die mit einem bestimmten Text enden

Verwenden Sie '$' als letztes Zeichen von zitiertem Text, um diesen Text nur am Ende einer Zeile abzugleichen. Um Zeilen in der Datei 'going' auszugeben, die mit einem Ausrufezeichen enden, geben Sie Folgendes ein:

$ grep '!$' geht

Bsp. 6: Passende Linien einer bestimmten Länge

Um Zeilen einer bestimmten Länge abzugleichen, verwenden Sie diese Anzahl von '.' Zeichen zwischen 'ˆ' und '$' – zum Beispiel, um alle Zeilen zu finden, die zwei Zeichen (oder Spalten) breit sind, verwenden Sie 'ˆ… $' als Regexp für die Suche nach.

Um alle Zeilen in '/usr/dict/words' auszugeben, die genau drei Zeichen breit sind, geben Sie Folgendes ein:

$ grep 'ˆ… $' /usr/dict/words

Für längere Zeilen ist es sinnvoller, ein anderes Konstrukt zu verwenden: 'ˆ.\number\$', wobei number die Anzahl der zu vergleichenden Zeilen ist. Verwenden Sie ',', um einen Zahlenbereich anzugeben.

Um alle Zeilen in '/usr/dict/words' auszugeben, die genau zwölf Zeichen breit sind, geben Sie Folgendes ein:

$ grep 'ˆ.\12\$' /usr/dict/words

Um alle Zeilen in '/usr/dict/words' auszugeben, die zweiundzwanzig oder mehr Zeichen breit sind, geben Sie Folgendes ein:

$ grep 'ˆ.\22,\$' /usr/dict/words

Beispiel 7: Übereinstimmende Zeilen, die einen oder mehrere Regexps enthalten

Um Zeilen zu finden, die eine beliebige Anzahl von Regexps enthalten, geben Sie jeden der zu suchenden Regexps zwischen den Alternationsoperatoren ('\|') als den zu suchenden Regexp an. Zeilen, die einen der angegebenen Regexps enthalten, werden ausgegeben.

Um alle Zeilen in 'playboy' auszugeben, die entweder die Muster 'the book' oder 'cake' enthalten, geben Sie Folgendes ein:

$ grep 'das Buch\|Kuchen' Playboy

Beispiel 8: Übereinstimmende Zeilen, die alle Regexps enthalten

Um Zeilen auszugeben, die übereinstimmen alle einer Reihe von Regexps verwenden Sie grep, um Zeilen auszugeben, die den ersten Regexp enthalten, den Sie abgleichen möchten, und leiten Sie die Ausgabe an einen grep mit dem zweiten Regexp als Argument weiter. Fügen Sie weiterhin Pipes zu grep-Suchen nach allen Regexps hinzu, nach denen Sie suchen möchten.

Um alle Zeilen in 'playlist' auszugeben, die die beiden Muster 'theshore' und 'sky' enthalten, unabhängig von der Groß-/Kleinschreibung, geben Sie Folgendes ein:

$ grep -i 'the Shore'-Wiedergabeliste | grep -i Himmel

Beispiel 9: Übereinstimmende Zeilen, die nur bestimmte Zeichen enthalten

Um Zeilen abzugleichen, die nur bestimmte Zeichen enthalten, verwenden Sie den Regexp 'ˆ[characters]*$', wobei Zeichen die passenden sind.  Um Zeilen in '/usr/dict/words' auszugeben, die nur Vokale enthalten, geben Sie Folgendes ein:

$ grep -i 'ˆ[aeiou]*$' /usr/dict/words

Die Option '-i' entspricht Zeichen unabhängig von der Groß-/Kleinschreibung; In diesem Beispiel werden also alle Vokalzeichen unabhängig von der Groß-/Kleinschreibung abgeglichen.

Bsp. 10: Finden von Sätzen unabhängig vom Abstand

Eine Möglichkeit, nach einer Phrase zu suchen, die mit zusätzlichen Leerzeichen zwischen Wörtern oder über einen Zeilen- oder Seitenumbruch hinweg vorkommen könnte, besteht darin, alle Zeilenvorschübe und zusätzlichen Leerzeichen aus der Eingabe zu entfernen und dann zu grep. Um dies zu tun, leiten Sie die Eingabe an tr mit "\r\n:\>\|-"als Argument für die Option '-d' (entfernen Sie alle Zeilenumbrüche aus der Eingabe); leiten Sie das mit der Option '-u' an den fmt-Filter (der Text wird mit gleichmäßigem Abstand ausgegeben); und leiten Sie das, um mit dem Muster zu suchen, nach dem Sie suchen.

Um über Zeilenumbrüche nach der Zeichenfolge 'gleichzeitig mit' in der Datei 'docs' zu suchen, geben Sie Folgendes ein:

$ Katzendokumentation | tr -d '\r\n:\>\|
-' | fmt -u | grep 'gleichzeitig mit'

Zusammenfassung

In diesem Artikel haben wir 10 praktische Beispiele für die Verwendung des Grep Linux-Befehls zum Suchen und Finden von Zeichenfolgen in einer Textdatei überprüft. Dabei haben wir gelernt, wie man reguläre Ausdrücke in Verbindung mit Grep verwendet, um komplexe Suchen in Textdateien durchzuführen. Inzwischen haben Sie eine bessere Vorstellung davon, wie leistungsfähig die Linux-Suchfunktionen sind.

Hier sind zusätzliche Ressourcen für diejenigen, die mehr über die Linux-Programmierung erfahren möchten:

Ressourcen für Systemadministratoren

Ressourcen für Linux-Kernel-Programmierer

Wörterbuch des Linux-Dateisystems

Umfassende Überprüfung der Funktionsweise des Linux-Datei- und Verzeichnissystems

AppyMouse On-Screen Trackpad und Mauszeiger für Windows Tablets
Tablet-Benutzer vermissen oft den Mauszeiger, insbesondere wenn sie die Laptops gewohnt sind. Die Touchscreen-Smartphones und -Tablets bieten viele Vo...
Mittlere Maustaste funktioniert nicht unter Windows 10
Das mittlere Maustaste hilft Ihnen beim Scrollen durch lange Webseiten und Bildschirme mit vielen Daten. Wenn das aufhört, werden Sie am Ende die Tast...
So ändern Sie die linke und rechte Maustaste auf einem Windows 10-PC
Es ist ganz normal, dass alle Computer-Maus-Geräte ergonomisch für Rechtshänder gestaltet sind. Es gibt aber auch Mausgeräte, die speziell für Linkshä...