regex0b.png
Edit v1.111 from 2007-10-10 to 2010-11-12 by SBa+HSc

Reguläre Ausdrücke

Mit regulären Ausdrücken ist es möglich, in einem Text Muster zu suchen. Als Beispiel ist es möglich, in einem Text alle eMail Adressen zu suchen. Dieser Artikel erläutert, wie man mit Linuxbefehlen erweiterte POSIX Muster erstellt, die eMail Adressen in einem Text oder einer Datei suchen.

Muster suchen

Hier führt anhand von Beispielen in das Suchen mit "Regulären Ausdrücken" ein. Dazu werden grundlegende Suchmuster in Verbindung mit dem "grep"-Befehl verwendet. Weiterhin wird erläutert, wie man den Suchmustern Daten zuführen kann.

Suche nach 2 Texten

Hier ist ein Beispiel, wie das Muster zur Suche nach 2 Texten, wie sie in einer eMail Adresse vorhanden sind, erstellt wird:

     Die Zeichenkette fängt mit einem oder mehreren
     alphanumerischen Zeichen - Buchstaben und Zahlen - an:
     [[:alnum:]]+
     Gefolgt von einem "@"-Zeichen:
     @
     Danach kommt eine weitere Zeichenkette:
     [[:alnum:]]+
     Ein Punkt folgt.
     Da dieser eine Musterbedeutung hat,
     wird es mit dem "\" Zeichen escapet:
     \.
     Als letztes kommt eine weitere alphanumerische Zeichenkette,
     die das Länderkürzel beinhaltet:
     [[:alnum:]]+
     Zusammen ergibt dass mit dem Suchbefehl:
     
      grep -E -o [[:alnum:]]+@[[:alnum:]]+\.[[:alnum:]]+
      
    

Erläuterungen

Das Beispiel verwendet den grep-Befehl, welcher Ausdrücke in Texten sucht. Der Parameter "-E" gibt an, das es ein "Regulärer"Ausdruck" ist. Der Parameter "-o" gibt an, das nur der Treffer gezeigt wird, nicht die ganze Zeile.

Hinweis: Eine genaue Beschreibung der Parameter für grep erlangt man mit dem Befehl "man grep" in der Linuxkonsole.

Der 1. Ausdruck des Suchmusters "[[:alnum:]]" sucht nach alphanumerischen Zeichen, also a-z A-Z und 0-9. Das ist ein POSIX-Klammerausdruck. Diese werden in der Tabelle im Anhang genauer aufgelistet. Das folgende "+" Zeichen bedeutet, dass wir mindestens eins von den vorhergehenden Zeichen suchen. Das "@" im Suchmuster sucht genau nach EINEM "@". Danach kommt wieder eine alphanumerische Zeichenfolge "[[:alnum:]]". Das ist der Domainname. Der darauffolgende Ausdruck "\." sucht nach einem Punkt. Nach genau EINEM Punkt. Danach kommt eine weitere Zeichenkette, das Länderkürzel.

Wenn also alle diese Teile nacheinander vorkommen, wird der Treffer ausgegeben.



Daten zuführen

per "echo"

Das Suchmuster kann auf beliebige Daten angewendet werden, z.B. Webseiten, eMails, Textdokumente, usw.

Hier ist ein Beispiel, wie man eine Zeichenkette in der Kommandozeile (bash) zur Übergabe definiert, und mit dem pipe operator | dem Suchmuster übergebt. Die "\" am Ende der Zeilen werden nur für die Zeilenumbrüche benutzt. Man kann sie auch weglassen, wenn man alles in eine Zeile schreibt.

     echo "Dieser Satz beinhaltet eine eMail Adresse: \
     name@domain.de heisst sie." | \
     grep -E -o [[:alnum:]]+@[[:alnum:]]+\.[[:alnum:]]+
     

Der 1. Teil 'echo "..." |' sendet einfach die Zeichenkette an den nachfolgenden Teil.

per Datei

Um die Suche auf Dateien anzuwenden, kann man folgende Befehle anwenden:

    cat DATEI.TXT | grep -E -o [[:alnum:]]+@[[:alnum:]]+\.[[:alnum:]]+
    oder
    grep -E -o [[:alnum:]]+@[[:alnum:]]+\.[[:alnum:]]+ < DATEI.TXT
    

Beispiel Datum

Hier ein weiteres Beispiel, welches alle Datumseinträge aus einer Datei heraussucht. Das Datumsformat, das gesucht wird ist:

    YYYY-MM-TT
    
Der Name der Datei ist:
    Bericht.txt
    
Das Suchmuster stellt 2 neue Konzepte vor:
  1. Anzahl der Vorkommnisse einer Suchmustereinheit:
          {n} :
          
           Die Anzahl der vorherigen Suchmustereinheit, z.B.:
           
          
          [[:digit:]]{4}
          
           bedeutet, dass wir 4 nacheinander folgende Zahlen suchen.
           
          
  2. Die Daten werden aus einer Datei ausgelesen:
          suchbefehl <
          datei
          
Das Suchmuster lautet wie folgt:
    grep -E -o [[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2} \
         < Bericht.txt
    


Aufgabe:

Erstellen Sie ein Suchmuster für HTTP URL's. Hier sind die zu beachtenden Parameter: es fängt mit "www" an, gefolgt von einem Punkt, einer Zeichenkette, einem weiteren Punkt und einer weiteren Zeichenkette.

Viel Spaß!
gotop.gif Nach Oben