So verwenden Sie grundlegende reguläre Ausdrücke, um besser zu suchen und Zeit zu sparen

So verwenden Sie grundlegende reguläre Ausdrücke, um besser zu suchen und Zeit zu sparen

How Use Basic Regular Expressions Search Better

Egal, ob Sie mit Grep gesucht haben oder sich Programme angesehen haben, die Dateien stapelweise für Sie umbenennen können, Sie haben sich wahrscheinlich gefragt, ob es einen einfacheren Weg gibt, Ihre Arbeit zu erledigen. Zum Glück gibt es das, und es heißt reguläre Ausdrücke.



(Comic von XKCD.com )

Was sind reguläre Ausdrücke?

Reguläre Ausdrücke sind auf eine ganz bestimmte Weise formatierte Anweisungen, die für viele verschiedene Ergebnisse stehen können. Auch bekannt als regex oder regexp, werden sie hauptsächlich in Such- und Dateibenennungsfunktionen verwendet. Eine Regex kann wie eine Formel verwendet werden, um eine Reihe verschiedener möglicher Ausgaben zu erstellen, nach denen alle gesucht werden. Alternativ können Sie angeben, wie eine Gruppe von Dateien benannt werden soll, indem Sie eine Regex angeben, und Ihre Software kann inkrementell zur nächsten beabsichtigten Ausgabe wechseln. Auf diese Weise können Sie mehrere Dateien in mehreren Ordnern sehr einfach und effizient umbenennen und über die Grenzen eines einfachen Nummerierungssystems hinausgehen.

Da die Verwendung von regulären Ausdrücken auf einer speziellen Syntax beruht, muss Ihr Programm in der Lage sein, diese zu lesen und zu parsen. Viele Programme zum Umbenennen von Batch-Dateien für Windows und OS X unterstützen Regexps sowie das plattformübergreifende Suchwerkzeug GREP (das wir in unserem Bash-Scripting-Anleitung für Anfänger ) und das Awk-Befehlszeilentool für *Nix. Darüber hinaus werden sie von vielen alternativen Dateimanagern, Startprogrammen und Suchwerkzeugen verwendet, und sie haben einen sehr wichtigen Platz in Programmiersprachen wie Perl und Ruby. Andere Entwicklungsumgebungen wie .NET, Java und Python sowie das kommende C++ 11 bieten alle Standardbibliotheken für die Verwendung regulärer Ausdrücke. Wie Sie sich vorstellen können, können sie sehr nützlich sein, wenn Sie versuchen, die Menge an Code zu minimieren, die Sie in ein Programm einfügen.

VERBUNDEN: Wie verwenden Sie Regex eigentlich?

Ein Hinweis zum Escape-Zeichen

Bevor wir Ihnen Beispiele zeigen, möchten wir auf etwas hinweisen. Wir werden die Bash-Shell und den grep-Befehl verwenden, um Ihnen zu zeigen, wie Sie reguläre Ausdrücke anwenden. Das Problem ist, dass wir manchmal Sonderzeichen verwenden möchten, die an grep übergeben werden müssen, und die Bash-Shell interpretiert dieses Zeichen, weil die Shell es auch verwendet. Unter diesen Umständen müssen wir diesen Zeichen entkommen. Dies kann verwirrend sein, da dieses Escape-Zeichen auch innerhalb von Regexps auftritt. Wenn wir dies beispielsweise in grep eingeben möchten:

<

das müssen wir ersetzen durch:

\<

Jedes Sonderzeichen bekommt hier einen Backslash. Alternativ können Sie auch einfache Anführungszeichen verwenden:

‘<‘

Anzeige

Einfache Anführungszeichen weisen bash an, NICHT zu interpretieren, was in ihnen steckt. Wir verlangen zwar, dass diese Schritte ausgeführt werden, damit wir es Ihnen demonstrieren können, Ihre Programme (insbesondere GUI-basierte) erfordern diese zusätzlichen Schritte jedoch oft nicht. Um die Dinge einfach und unkompliziert zu halten, wird Ihnen der eigentliche reguläre Ausdruck als Text in Anführungszeichen übergeben, und Sie sehen die Escape-Syntax in den Befehlszeilen-Screenshots.

Wie expandieren sie?

Regexps sind eine sehr prägnante Art, Begriffe zu formulieren, sodass Ihr Computer sie auf mehrere Optionen erweitern kann. Schauen wir uns das folgende Beispiel an:

So deaktivieren Sie das Amazon-Konto

tom[0123456789]

Die eckigen Klammern — [ und ] — teilen der Parsing-Engine mit, dass, was auch immer darin enthalten ist, jedes EIN Zeichen verwendet werden kann, um zu passen. Was sich in diesen Klammern befindet, wird als Zeichensatz bezeichnet.

Wenn wir also eine riesige Liste von Einträgen hätten und diese Regex für die Suche verwenden würden, würden die folgenden Begriffe übereinstimmen:

  • tom
  • tom0
  • tom1
  • tom2
  • tom3

und so weiter. Die folgende Liste würde jedoch NICHT übereinstimmen und würde daher NICHT in Ihren Ergebnissen auftauchen:

  • Tomate ; die Regex berücksichtigt keine Buchstaben nach tom
  • Tom; Bei der Regex muss die Groß-/Kleinschreibung beachtet werden!

Sie können auch mit einem Punkt (.) suchen, der jedes vorhandene Zeichen zulässt, solange ein Zeichen vorhanden ist.

reg vs Periode

Wie Sie sehen können, greifen Sie mit

.tom

Anzeige

brachte keine Begriffe auf, die nur tom am Anfang hatten. Sogar grüne Tomaten kamen rein, weil das Leerzeichen vor tom als Zeichen zählt, aber Begriffe wie tomF hatten am Anfang kein Zeichen und wurden daher ignoriert.

Stimme auf Google Maps ändern

Hinweis: Das Standardverhalten von Grep besteht darin, eine ganze Textzeile zurückzugeben, wenn ein Teil Ihrer Regex entspricht. Andere Programme tun dies möglicherweise nicht, und Sie können dies in grep mit dem Flag '-o' deaktivieren.

Sie können den Wechsel auch mit einem Pipe (|) angeben, wie hier:

speziell (s | z) e

Dies wird beides finden:

  • spezialisiert
  • spezialisieren

Wenn Sie den grep-Befehl verwenden, müssen wir die Sonderzeichen (, | und ) mit Backslashes maskieren und das Flag '-E' verwenden, damit dies funktioniert und hässliche Fehler vermieden werden.

Elternrohr entkommen

Wie oben erwähnt, liegt dies daran, dass wir der Bash-Shell mitteilen müssen, dass sie diese Zeichen an grep weitergibt und nichts mit ihnen macht. Das Flag ‚-E‘ weist grep an, Klammern und Pipe als Sonderzeichen zu verwenden.

Sie können nach Ausschluss suchen, indem Sie ein Caret-Zeichen verwenden, das sich sowohl innerhalb Ihrer eckigen Klammern als auch am Anfang eines Satzes befindet:

Tom[^F|0-9]

Anzeige

Auch hier, wenn Sie grep und bash verwenden, denken Sie daran, dieser Pipe zu entkommen!

Begriffe, die in der Liste enthalten waren, aber NICHT angezeigt wurden, sind:

  • tom0
  • tom5
  • tom9
  • tomF

Diese stimmten nicht mit unserer Regex überein.

Wie kann ich Umgebungen nutzen?

Oft suchen wir nach Grenzen. Manchmal möchten wir nur Strings, die am Anfang eines Wortes, am Ende eines Wortes oder am Ende einer Codezeile stehen. Dies kann leicht mit sogenannten Ankern erfolgen.

Mit einem Caret (außerhalb von Klammern) können Sie den Anfang einer Zeile bestimmen.

^tom

Zeilenanfang

Um nach dem Ende einer Zeile zu suchen, verwenden Sie das Dollarzeichen.

tom$

Ende der Linie

Sie können sehen, dass unser Suchstring in diesem Fall VOR dem Anker steht.

Anzeige

Sie können auch nach Übereinstimmungen suchen, die am Anfang oder am Ende von Wörtern stehen, nicht ganze Zeilen.

tom>

Wortanfang

Wo kann man Domainnamen kaufen?

Ende des Wortes

Wie in der Anmerkung am Anfang dieses Artikels erwähnt, müssen wir diese Sonderzeichen maskieren, da wir bash verwenden. Alternativ können Sie auch einfache Anführungszeichen verwenden:

Wortanfang q

Ende des Wortes q

Die Ergebnisse sind die gleichen. Stellen Sie sicher, dass Sie einfache Anführungszeichen und keine doppelten Anführungszeichen verwenden.

Andere Ressourcen für fortgeschrittene Regexps

Wir sind hier nur an der Spitze des Eisbergs angelangt. Sie können auch nach Geldbegriffen suchen, die durch die Währungsmarkierung abgegrenzt sind, und nach einem von drei oder mehr übereinstimmenden Begriffen suchen. Die Dinge können wirklich kompliziert werden. Wenn Sie mehr über reguläre Ausdrücke erfahren möchten, werfen Sie einen Blick auf die folgenden Quellen.

  • Zytrax.com hat ein paar Seiten mit konkreten Beispielen, warum Dinge passen und nicht zusammenpassen.
  • Reguläre-Ausdrücke.info hat auch eine Killer-Anleitung für viele der fortgeschritteneren Dinge sowie eine praktische Referenzseite.
  • Gnu.org hat eine Seite, die der Verwendung von Regexps mit grep gewidmet ist.

Sie können Ihre regulären Ausdrücke auch mit einem kostenlosen Flash-basierten Online-Tool namens . erstellen und testen RegExr . Es funktioniert während der Eingabe, ist kostenlos und kann in den meisten Browsern verwendet werden.


Haben Sie eine bevorzugte Verwendung für reguläre Ausdrücke? Kennen Sie einen großartigen Batch-Renamer, der sie verwendet? Vielleicht willst du einfach nur mit deinem grep-fu prahlen. Bringen Sie Ihre Gedanken mit, indem Sie kommentieren!

WEITER LESEN