Connect with us

Wie man

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

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

Unabhängig davon, ob Sie mit Grep gesucht haben oder sich Programme angesehen haben, mit denen Sie Dateien stapelweise umbenennen können, haben Sie 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 Anweisungen, die sehr spezifisch formatiert sind und für viele verschiedene Ergebnisse stehen können. Sie werden auch als „Regex“ oder „Regexp“ bezeichnet und hauptsächlich in Such- und Dateinamenfunktionen verwendet. Ein regulärer Ausdruck kann wie eine Formel verwendet werden, um eine Reihe verschiedener möglicher Ausgaben zu erstellen, nach denen alle gesucht werden. Alternativ können Sie festlegen, wie eine Gruppe von Dateien benannt werden soll, indem Sie einen regulären Ausdruck angeben, und Ihre Software kann schrittweise zur nächsten beabsichtigten Ausgabe wechseln. Auf diese Weise können Sie mehrere Dateien in mehreren Ordnern sehr einfach und effizient umbenennen und die Grenzen eines einfachen Nummerierungssystems überschreiten.

Da die Verwendung regulärer Ausdrücke von einer speziellen Syntax abhängt, muss Ihr Programm in der Lage sein, diese zu lesen und zu analysieren. Viele Programme zum Umbenennen von Batchdateien für Windows und OS X unterstützen reguläre Ausdrücke sowie das plattformübergreifende Suchwerkzeug GREP (das wir in unserem Bash Scripting für Anfänger-Handbuch angesprochen haben) und das Awk-Befehlszeilentool für * Nix. Darüber hinaus werden sie von vielen alternativen Dateimanagern, Startern und Suchwerkzeugen verwendet, und sie spielen in Programmiersprachen wie Perl und Ruby eine sehr wichtige Rolle. Andere Entwicklungsumgebungen wie .NET, Java und Python sowie das kommende C ++ 11 bieten 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, die Sie in ein Programm einfügen, zu minimieren.

Ein Hinweis zum Entkommen von Zeichen

Bevor wir Ihnen Beispiele zeigen, möchten wir Sie auf etwas hinweisen. Wir werden die Bash-Shell und den Befehl grep 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 dieses Zeichen interpretiert, weil die Shell es ebenfalls verwendet. Unter diesen Umständen müssen wir diesen Charakteren „entkommen“. Dies kann verwirrend werden, da dieses „Entkommen“ von Zeichen auch innerhalb von regulären Ausdrücken auftritt. Wenn wir dies beispielsweise in grep eingeben möchten:

<

wir müssen das ersetzen durch:

<

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

‚ <'

Einfache Anführungszeichen weisen bash an, NICHT zu interpretieren, was in ihnen enthalten ist. Obwohl diese Schritte erforderlich sind, damit wir sie für Sie demonstrieren können, erfordern Ihre Programme (insbesondere GUI-basierte) diese zusätzlichen Schritte häufig nicht. Um die Dinge einfach und unkompliziert zu halten, wird Ihnen der eigentliche reguläre Ausdruck als zitierter Text gegeben, und die maskierte Syntax wird in den Befehlszeilen-Screenshots angezeigt.

Wie expandieren sie?

Regexps sind eine sehr präzise Methode, um Begriffe anzugeben, sodass Ihr Computer sie auf mehrere Optionen erweitern kann. Schauen wir uns das folgende Beispiel an:

Tom[0123456789]

Die eckigen Klammern – [ and ] – Sagen Sie der Parsing-Engine, dass, was auch immer sich darin befindet, ein beliebiges Zeichen verwendet werden kann, um eine Übereinstimmung zu erzielen. Was sich in diesen Klammern befindet, wird als Zeichensatz bezeichnet.

Wenn wir also eine große Liste von Einträgen hätten und diesen regulären Ausdruck für die Suche verwenden würden, würden die folgenden Begriffe übereinstimmen:

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

  • Tomate ; Die Regex berücksichtigt keine Buchstaben nach „tom“.
  • Tom; Die Regex unterscheidet zwischen Groß- und Kleinschreibung!

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

Wie Sie sehen können, greifen Sie mit

.tom

Ich habe keine Begriffe angesprochen, die am Anfang nur „Tom“ hatten. Sogar „grüne Tomaten“ kamen herein, weil das Leerzeichen vor „Tom“ als Zeichen zählt, aber Begriffe wie „TomF“ hatten am Anfang kein Zeichen und wurden daher ignoriert.

Hinweis: Das Standardverhalten von Grep besteht darin, eine ganze Textzeile zurückzugeben, wenn ein Teil mit Ihrem regulären Ausdruck übereinstimmt. 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 einer Pipe (|) festlegen, wie hier:

speciali (s | z) e

Dies wird beides finden:

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

Wie oben erwähnt, liegt dies daran, dass wir der Bash-Shell anweisen müssen, diese Zeichen an grep zu übergeben und nichts damit zu tun. Das Flag ‚-E‘ weist grep an, die Klammern und die Pipe als Sonderzeichen zu verwenden.

Sie können durch Ausschluss mit einem Caret suchen, das sich sowohl in eckigen Klammern als auch am Anfang eines Satzes befindet:

Tom[^F|0-9]

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:

Diese stimmten nicht mit unserer Regex überein.

Wie kann ich Umgebungen nutzen?

Oft suchen wir nach Grenzen. Manchmal möchten wir nur Zeichenfolgen, die am Anfang eines Wortes, am Ende eines Wortes oder am Ende einer Codezeile erscheinen. Dies kann leicht mit sogenannten Ankern durchgeführt werden.

Wenn Sie ein Caret (außerhalb von Klammern) verwenden, können Sie den „Anfang“ einer Linie festlegen.

^ tom

Verwenden Sie das Dollarzeichen, um nach dem Ende einer Zeile zu suchen.

tom $

Sie können sehen, dass unsere Suchzeichenfolge in diesem Fall VOR dem Anker steht.

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

tom >

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

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

Andere Ressourcen für erweiterte Regexps

Wir haben hier nur die Spitze des Eisbergs erreicht. Sie können auch nach Geldbegriffen suchen, die durch die Währungsmarkierung gekennzeichnet sind, und nach drei oder mehr übereinstimmenden Begriffen suchen. Die Dinge können sehr kompliziert werden. Wenn Sie mehr über reguläre Ausdrücke erfahren möchten, schauen Sie sich bitte die folgenden Quellen an.

  • Zytrax.com hat ein paar Seiten mit konkreten Beispielen, warum Dinge übereinstimmen und nicht übereinstimmen.
  • Regular-Expressions.info hat auch eine Killer-Anleitung zu vielen fortgeschrittenen Sachen sowie eine praktische Referenzseite.
  • Gnu.org hat eine Seite, die der Verwendung von regulären Ausdrücken 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 möchten Sie nur mit Ihrem Grep-Fu angeben. Tragen Sie Ihre Gedanken bei, indem Sie kommentieren!

Continue Reading
Click to comment

Leave a Reply

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Tendencia