Startseite » wie man » So verwenden Sie einfache reguläre Ausdrücke, um besser zu suchen und Zeit zu sparen

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

    Egal, ob Sie mit Grep gesucht haben oder nach Programmen gesucht haben, mit denen Sie Dateien 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 Anweisungen, die auf sehr spezifische Weise formatiert sind und für viele unterschiedliche Ergebnisse stehen können. Sie werden auch als "Regex" oder "Regex" bezeichnet. Sie werden hauptsächlich in Such- und Dateinamensfunktionen verwendet. Ein Regex kann wie eine Formel verwendet werden, um verschiedene mögliche Ausgaben zu erstellen, nach denen alle gesucht werden. Alternativ können Sie angeben, 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 für reguläre Ausdrücke eine spezielle Syntax verwendet wird, muss Ihr Programm sie lesen und analysieren können. Viele Programme zum Umbenennen von Stapeldateien für Windows und OS X unterstützen Regex-Ausdrücke sowie das plattformübergreifende Suchwerkzeug GREP (auf das wir in unserem Bash Scripting für Anfänger-Handbuch eingegangen sind) und das Awk-Befehlszeilenprogramm für * Nix. Darüber hinaus verwenden sie viele alternative Dateimanager, Launchers und Suchwerkzeuge, 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.

    Ein Hinweis zur Flucht 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 wird dieses Zeichen interpretieren, da die Shell es auch verwendet. Unter diesen Umständen müssen wir diesen Zeichen entkommen. Dies kann verwirrend sein, da dieses "Escape" von Zeichen auch innerhalb von Regex auftritt. Wenn wir das zum Beispiel in grep eingeben wollen:

    \<

    das müssen wir ersetzen durch:

    \\\<

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

    '\<'

    Einfache Anführungszeichen sagen bash NICHT, was darin enthalten ist. Diese Schritte müssen zwar ausgeführt werden, damit wir sie für Sie demonstrieren können, für Ihre Programme (insbesondere GUI-basierte Programme) sind diese zusätzlichen Schritte jedoch häufig nicht erforderlich. Um die Dinge einfach und unkompliziert zu halten, wird Ihnen der tatsächliche reguläre Ausdruck als zitierter Text übergeben. In den Befehlszeilen-Screenshots sehen Sie die Escape-Syntax.

    Wie erweitern sie sich??

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

    tom [0123456789]

    Die eckigen Klammern - [und] - teilen der Parsing-Engine mit, dass alles, was sich darin befindet, mit EINEM Zeichen übereinstimmen kann. Was sich in diesen Klammern befindet, wird als Zeichensatz bezeichnet.

    Wenn wir also eine riesige Liste von Einträgen hätten und diese Regex zum Suchen 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 angezeigt:

    • Tomate ; Der Regex berücksichtigt keine Buchstaben nach "Tom"
    • Tom; Der Regex ist case sensitive!

    Sie können auch mit einem Punkt (.) Suchen, der alle vorhandenen Zeichen zulässt, sofern ein vorhandenes Zeichen vorhanden ist.

    Wie Sie sehen, grepping mit

    .Tom

    brachte keine Begriffe auf, die zu Beginn nur „tom“ hatten. Sogar "grüne Tomaten" kamen ins Spiel, weil der Raum vor "tom" als Charakter zählt, aber Begriffe wie "tomF" hatten zu Beginn keinen Charakter und wurden daher ignoriert.

    Hinweis: Das Standardverhalten von Grep ist, 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 der Markierung '-o' deaktivieren.

    Sie können alternativ auch eine Pipe (|) angeben, wie hier:

    speciali (s | z) e

    Dies wird beides finden:

    • spezialisieren
    • spezialisieren

    Wenn Sie den Befehl grep verwenden, müssen Sie die Sonderzeichen (, | und) mit Backslashes mit Escapezeichen versehen und das Flag '-E' verwenden, um dies zu aktivieren und hässliche Fehler zu vermeiden.

    Wie oben erwähnt, liegt dies daran, dass wir der bash-Shell sagen müssen, dass sie diese Zeichen an grep übergeben und nichts mit ihnen machen sollen. Das '-E'-Flag weist grep an, die Klammern und Pipe als Sonderzeichen zu verwenden.

    Sie können nach Ausschluss mit einem Einfügemarke suchen, das sich sowohl in Ihren eckigen Klammern als auch am Anfang eines Satzes befindet:

    tom [^ F | 0-9]

    Wenn Sie grep und bash verwenden, vergessen Sie nicht, diese Pipe zu verlassen!

    Begriffe, die in der Liste waren, aber NICHT auftauchten, 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 Zeichenfolgen, die am Anfang eines Wortes, am Ende eines Wortes oder am Ende einer Codezeile erscheinen. Dies kann leicht mit so genannten Ankern durchgeführt werden.

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

    ^ Tom

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

    tom $

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

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

    \

    tom \>

    Wie bereits in der Anmerkung zu Beginn dieses Artikels erwähnt, müssen wir diese Sonderzeichen mit Escape-Zeichen versehen, 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 fortgeschrittene Regexps

    Wir haben hier nur die Spitze des Eisbergs getroffen. Sie können auch nach Geldausdrücken suchen, die von der Währungsmarkierung abgegrenzt werden, und nach drei oder mehr übereinstimmenden Ausdrücken 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 einige Seiten mit konkreten Beispielen dafür, warum Dinge passen und nicht passen.
    • Regular-Expressions.info bietet auch eine Killer-Anleitung zu vielen fortgeschrittenen Dingen sowie eine praktische Referenzseite.
    • Gnu.org hat eine Seite für die Verwendung von Regexps mit grep.

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


    Haben Sie eine Lieblingsanwendung für reguläre Ausdrücke? Kennen Sie einen tollen Batch Renamer, der sie verwendet? Vielleicht möchten Sie nur mit Ihrem Grep-Fu prahlen. Trage deine Gedanken ein, indem du kommentierst!