Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
Über die Autoren
Über dieses Buch
Linux vs. BSD
1 Der Kernel
2 Die Grundlagen aus Anwendersicht
3 Die Shell
4 Reguläre Ausdrücke
5 Tools zur Dateibearbeitung
6 Die Editoren
7 Shellskriptprogrammierung
8 Benutzerverwaltung
9 Grundlegende Verwaltungsaufgaben
10 Netzwerk-Grundlagen
11 Anwendersoftware für das Netzwerk
12 Netzwerkdienste
13 Mailserver unter Linux
14 LAMP
15 DNS-Server
16 Secure Shell
17 Die grafische Oberfläche
18 Window-Manager und Desktops
19 X11-Programme
20 Multimedia und Spiele
21 Softwareentwicklung
22 Crashkurs in C und Perl
23 Sicherheit
24 Prozesse und IPC
25 Bootstrap und Shutdown
26 Dateisysteme
27 Virtualisierung und Emulatoren
A Die Installation
B Lösungen zu den einzelnen Aufgaben
C Kommandoreferenz
D X11-InputDevices
E MBR
F Die Buch-DVDs
G Glossar
H Literatur

Download:
- ZIP, ca. 6,3 MB
Buch bestellen
Ihre Meinung?

Spacer
 <<   zurück
Linux von Johannes Plötner, Steffen Wendzel
Das distributionsunabhängige Handbuch
Buch: Linux

Linux
2., aktualisierte und erweiterte Auflage
1119 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1090-4
gp 4 Reguläre Ausdrücke
  gp 4.1 Aufbau von regulären Ausdrücken
  gp 4.2 Der Stream-Editor sed
    gp 4.2.1 Was bringt mir sed?
    gp 4.2.2 Erste Schritte mit sed
    gp 4.2.3 sed-Befehle
    gp 4.2.4 Nach Zeilen filtern
    gp 4.2.5 Wiederholungen in regulären Ausdrücken
  gp 4.3 grep
    gp 4.3.1 grep -E und egrep
    gp 4.3.2 Geschwindigkeitsvergleich
  gp 4.4 awk
    gp 4.4.1 Nutzen und Interpreter
    gp 4.4.2 Der Aufruf von awk
    gp 4.4.3 Erste Gehversuche
    gp 4.4.4 Der Anweisungsblock
    gp 4.4.5 Variablen
    gp 4.4.6 Arrays
    gp 4.4.7 Bedingte Anweisungen
    gp 4.4.8 Schleifen
    gp 4.4.9 Funktionen in awk
    gp 4.4.10 Ein paar Worte zum Schluss
  gp 4.5 Zusammenfassung
  gp 4.6 Aufgaben

Gegen Angriffe kann man sich wehren, gegen Lob ist man machtlos._$ret_-- Sigmund Freud

4 Reguläre Ausdrücke

Nun kommen wir zu drei sehr populären und mächtigen Tools, nämlich zu sed, grep und awk.

Doch um mit selbigen auch umgehen zu können, muss man erst einmal sogenannte reguläre Ausdrücke (engl. regular expressions) verstehen.

Reguläre Ausdrücke – es gibt übrigens ganze Bücher über dieses Thema <... die ziemlich langweilig sind, wenn man nicht gerade selbst reguläre Ausdrücke implementiert (oder auch trotzdem)> – dienen in der Shell zum Filtern von Zeichenketten (Strings) aus einem Input, etwa einer Textdatei. Wie so oft lässt sich dies am besten an einem Beispiel verdeutlichen.

Das Programm grep filtert aus einem Input (Pipe, Datei) Zeilen heraus, in denen ein bestimmtes Muster vorkommt. Gegeben sei eine Datei mit den Namen von Städten, wobei jede Stadt in einer separaten Zeile steht. grep soll nun all jene Zeilen herausfiltern, in denen ein kleines »a« enthalten ist.

$ cat Standorte 
Augsburg 
Bremen 
Friedrichshafen 
Aschersleben 
Bernburg 
Berlin 
Halle 
Essen 
Furtwangen 
Kehlen 
Krumbach 
Osnabrueck 
Kempten 
$ grep a Standorte 
Friedrichshafen 
Halle 
Furtwangen 
Krumbach 
Osnabrueck

Listing 4.1    grep filtert alle Zeilen mit einem »a« heraus

Wie Sie sehen, wurden tatsächlich nur die Zeilen ausgegeben, in denen das Zeichen »a« vorkam. Dies können Sie mit jedem Zeichen und sogar mit ganzen Strings durchführen – hier ein paar Beispiele:

$ grep b Standorte     // filtert nach 'b' 
$ grep B Standorte     // filtert nach 'B' 
$ grep hafen Standorte // filtert nach 'hafen'

Reguläre Ausdrücke sind case-sensitive. Dass bedeutet, es wird zwischen Groß- und Kleinbuchstaben unterschieden.

Nun zurück zur eigentlichen Definition regulärer Ausdrücke: Mit ihnen können Sie Muster für solche Filtervorgänge, wie sie gerade gezeigt wurden, angeben. Allerdings können mithilfe dieser regulären Ausdrücke nicht nur explizit angegebene Strings, etwa »hafen«, gefiltert werden. Nein, dies funktioniert auch dynamisch. So können Sie angeben, dass »hafen« am Zeilenende oder -anfang vorkommen kann, dass das zweite Zeichen ein »a«, aber auch ein »x« sein kann, dass das letzte Zeichen entweder klein- oder großgeschrieben werden darf und so weiter.

Sollen beispielsweise alle Zeilen, die auf »n« oder »g« enden, ausgegeben werden, kann der reguläre Ausdruck »[ng]$ verwendet werden: <Keine Angst, dies ist nur ein Beispiel – gleich lernen Sie, wie solche Ausdrücke zu lesen und zu schreiben sind.>

$ grep "[ng]$" Standorte 
Augsburg 
Bremen 
Friedrichshafen 
Aschersleben 
Bernburg 
Berlin 
Essen 
Furtwangen 
Kehlen 
Kempten

Listing 4.2    Ein erstes Beispiel


Galileo Computing

4.1 Aufbau von regulären Ausdrücken  toptop

Nach dieser kleinen Einleitung werden wir uns nun den regulären Ausdrücken selbst zuwenden. Im Folgenden werden Sie lernen, wie solche Ausdrücke, die übrigens recht oft vorzufinden sind, zu verstehen sind und wie Sie selbst solche Ausdrücke formulieren können. Keine Sorge – so schwer ist das nicht.

Erst exakt

Eben wandten wir den regulären Ausdruck »[ng]$« an. Wie ist dieser zu verstehen? Das Dollarzeichen ($) steht für das Ende einer Zeile. Vor diesem Dollarzeichen sind in eckigen Klammern zwei Zeichen (»ng«) gesetzt. Das bedeutet, dass diese zwei Zeichen (und kein anderes) am Zeilenende stehen können.

Und zwar kann nur genau eines der beiden Zeichen das letzte Zeichen der Zeile ausmachen.

Würden Sie in der Klammer also beispielsweise noch ein »h« hinzufügen, so könnte auch dieses »h« das letzte Zeichen in der Zeile sein.

Jetzt einfach

Kurz lesen würde man es so: Das letzte Zeichen der Zeile ($) kann entweder ein »n« oder ein »g« sein ([ng]). Reguläre Ausdrücke können sich aus mehreren solcher Muster zusammensetzen. Sie können beispielsweise das Zeichen, das vor dem letzten Zeichen einer Zeile steht, auch noch festlegen und so weiter.

Hier ist eine Auflistung der möglichen Filterausdrücke mit Beispielen:

  • abc
  • Der String »abc«
  • [xyz]
  • Eines der Zeichen in der eckigen Klammer muss (an der jeweiligen Stelle) vorkommen.

    • [aAbc]

    • Entweder »Abc« oder »abc«
  • [a-b]
  • Mit dem Minus-Operator werden Zeichenbereiche für eine Position festgelegt.

    • [a-zA-Z0-9bc]

    • In diesem Beispiel werden alle kleinen und großen Zeichen des Alphabets und alle Ziffern von 0 bis 9 akzeptiert, worauf die Zeichen »bc« folgen müssen.
  • [^a-b]
  • Das Dach-Zeichen (^) negiert die Angabe. Dies funktioniert sowohl mit dem als auch ohne den Minus-Operator. Dieser Ausdruck ist also dann erfüllt, wenn an der entsprechenden Stelle ein Zeichen steht, das nicht »a« oder »b« ist.
  • [xyz]\*
  • Das Joker-Zeichen (*) steht für eine beliebige Anzahl von Vorkommen eines Zeichens.

    • K[a]\*tze

    • würde beispielsweise sowohl »Kaaatze« als auch »Katze« und »Ktze« herausfiltern.
  • [xyz]\+
  • Das Plus-Zeichen (+) steht für eine beliebige Anzahl von Vorkommen eines Zeichens. Im Gegensatz zum Joker-Zeichen muss das Zeichen allerdings mindestens einmal vorkommen.

    • K[a]\+tze

    • würde beispielsweise sowohl »Kaaatze« als auch »Katze« herausfiltern.
  • $
  • Dieses Zeichen steht für das Zeilenende.

    • hafen$

    • Die letzten Zeichen der Zeile müssen »hafen« sein.
  • ^
  • Dieses Zeichen steht für den Zeilenanfang und ist nicht mit der Negierung (die in eckigen Klammern steht) zu verwechseln.

    • ^Friedrichs

    • Die ersten Zeichen der Zeile müssen »Friedrichs« sein.
  • .
  • Der Punkt steht für ein beliebiges Zeichen.

    • Friedr.chshafen

    • In der Zeile muss die Zeichenkette »Friedr« enthalten sein. Darauf muss ein beliebiges Zeichen (aber kein Zeilenende) folgen und darauf die Zeichenkette »chshafen«.
  • \x
  • Das Metazeichen »x« wird durch den Backslash nicht als Anweisung im regulären Ausdruck, sondern als bloßes Zeichen interpretiert. Metazeichen sind diese Zeichen:
  • ^{ $ . [ ] *}

Auch sind Kombinationen aus solchen Filterausdrücken möglich. Hier ein Beispiel: Um festzulegen, dass eine Zeile mit einem kleinen oder großen »H« anfangen soll und dass darauf die Zeichen »alle« und das Zeilenende folgen sollen, wäre dieser Ausdruck der richtige: ^[hH]alle$

$ grep "^[hH]alle$" Standorte 
Halle

Vergessen Sie nicht, die regulären Ausdrücke in Anführungszeichen zu stellen. Wenn Sie diese weglassen, wird die Shell diese Zeichen anders interpretieren und der Ausdruck wird verfälscht. Um einen regulären Ausdruck auch ohne Anführungszeichen verwenden zu können, müssen Sie alle sogenannten Metazeichen »escapen«. Das bedeutet, dass den Zeichen \ ^ $ . [ ] * ein Backslash (\) vorangestellt werden muss.

Der obige Ausdruck würde deswegen folgendermaßen aussehen müssen:

 ^[hH\]alle\$


Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






 <<   zurück
  
  Zum Katalog
Zum Katalog: Linux






 Linux
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


Zum Katalog: Einstieg in Linux






 Einstieg in Linux


Zum Katalog: Debian GNU/Linux






 Debian GNU/Linux


Zum Katalog: Ubuntu GNU/Linux






 Ubuntu GNU/Linux


Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-UNIX-Programmierung






 Linux-UNIX-
 Programmierung


Zum Katalog: Praxisbuch Netzwerk-Sicherheit






 Praxisbuch
 Netzwerk-Sicherheit


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de