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

Inhaltsverzeichnis
Vorwort
1 Einleitung
TEIL I: Einstieg in Linux
2 Die Installation
3 Erste Schritte
4 Linux als Workstation für Einsteiger
TEIL II: Grundlagen
5 Kernel
6 Grundlagen aus Anwendersicht
TEIL III: Die Shell
7 Die Shell
8 Reguläre Ausdrücke
9 Konsolentools
10 Die Editoren
11 Shellskriptprogrammierung mit der bash
12 Die C-Shell
TEIL IV: System- & Netzwerkadministration
13 Benutzerverwaltung
14 Grundlegende Verwaltungsaufgaben
15 Netzwerkgrundlagen
16 Anwendersoftware für das Netzwerk
17 Netzwerkdienste
18 Mailserver unter Linux
19 LAMP & Co.
20 DNS-Server
21 Secure Shell
TEIL V: Die grafische Oberfläche
22 Die grafische Oberfläche
23 Window-Manager und Desktops
24 X11-Programme
25 Multimedia und Spiele
TEIL VI: Systeminterna
26 Prozesse und IPC
27 Bootstrap und Shutdown
28 Dateisysteme
29 Virtualisierung und Emulatoren
TEIL VII: Programmierung und Sicherheit
30 Softwareentwicklung
31 Crashkurs in C und Perl
32 Einführung in Computersicherheit
33 Netzwerksicherheit überwachen
TEIL VIII: Anhang
A Lösungen zu den einzelnen Aufgaben
B Kommandoreferenz
C X11-InputDevices
D MBR
E Buch-DVDs
F Glossar
G Literatur
Stichwort
Ihre Meinung?

Spacer
Linux von Johannes Plötner, Steffen Wendzel
Das umfassende Handbuch
Buch: Linux

Linux
Rheinwerk Computing
1282 S., 5., aktualisierte Auflage 2012, geb., mit 2 DVDs
49,90 Euro, ISBN 978-3-8362-1822-1
Pfeil 8 Reguläre Ausdrücke
Pfeil 8.1 Der Aufbau regulärer Ausdrücke
Pfeil 8.2 Der Stream-Editor sed
Pfeil 8.2.1 Was bringt mir sed?
Pfeil 8.2.2 Erste Schritte mit sed
Pfeil 8.2.3 sed-Befehle
Pfeil 8.2.4 Nach Zeilen filtern
Pfeil 8.2.5 Wiederholungen in regulären Ausdrücken
Pfeil 8.3 grep
Pfeil 8.3.1 grep -E und egrep
Pfeil 8.3.2 Geschwindigkeitsvergleich
Pfeil 8.4 awk
Pfeil 8.4.1 Nutzen und Interpreter
Pfeil 8.4.2 Der Aufruf des Interpreters awk
Pfeil 8.4.3 Erste Gehversuche
Pfeil 8.4.4 Der Anweisungsblock
Pfeil 8.4.5 Variable
Pfeil 8.4.6 Arrays
Pfeil 8.4.7 Bedingte Anweisungen
Pfeil 8.4.8 Schleifen
Pfeil 8.4.9 Funktionen in awk
Pfeil 8.4.10 Ein paar Worte zum Schluss
Pfeil 8.5 Zusammenfassung
Pfeil 8.6 Aufgaben

»Gegen Angriffe kann man sich wehren,
gegen Lob ist man machtlos.«
– Sigmund Freud

8 Reguläre AusdrückeZur nächsten Überschrift

Nun kommen wir zu drei sehr populären und mächtigen Tools: sed, grep und awk. Um mit ihnen umgehen zu können, muss man erst einmal sogenannte reguläre Ausdrücke (engl. regular expressions) verstehen.

Diese Ausdrücke – es gibt übrigens ganze Bücher zum Thema – dienen in der Shell zum Filtern von Zeichenketten (Strings) aus einer Eingabe, etwa einer Textdatei. Am besten lässt sich das an einem Beispiel verdeutlichen.

[zB]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.

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

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

// Nun werden alle Orte, die ein 'a' enthalten gefiltert:

$ grep a Standorte
Friedrichshafen
Halle
Furtwangen
Krumbach
Osnabrueck

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:

Listing 8.2 Weitere Beispiele für reguläre Ausdrücke

$ 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. Das 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, wie etwa »hafen«, gefiltert werden, sondern 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: [Fn. Keine Angst, dies ist nur ein Beispiel – gleich lernen Sie, wie solche Ausdrücke zu lesen und zu schreiben sind.]

Listing 8.3 Ein erstes Beispiel für einen dynamischen regulären Ausdruck

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

Rheinwerk Computing - Zum Seitenanfang

8.1 Der Aufbau regulärer AusdrückeZur vorigen Überschrift

Nach dieser kleinen Einleitung wenden wir uns nun den regulären Ausdrücken selbst zu. Im Folgenden werden Sie lernen, wie solche Ausdrücke, die man übrigens recht oft vorfindet, zu verstehen sind und wie Sie selbst welche 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

Lesen würde man den Ausdruck 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-9]bc
      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 Zirkumflex (^) negiert die Angabe. Dies funktioniert sowohl mit als auch ohne Minus-Operator. Dieser Ausdruck ist also dann erfüllt, wenn an der entsprechenden Stelle ein Zeichen steht, das nicht »a« oder »b« ist.
  • [xyz]\*
    Der Stern ist das Joker-Zeichen (*) und steht für eine beliebige Anzahl von Vorkommen eines Zeichens.
    • K[a\*tze]
      würde beispielsweise sowohl »Kaaatze«, »Katze« als auch »Ktze« herausfiltern.
  • [xyz]\+
    Das Plus-Zeichen (+) steht für eine beliebige Anzahl von Vorkommen eines Zeichens. Im Gegensatz zum Stern muss das Zeichen allerdings mindestens einmal vorkommen.
    • K[a\+tze]
      würde beispielsweise sowohl »Kaaatze«, als auch »Katze« herausfiltern – es muss mindestens 1 »a« vorhanden sein.
  • $
    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 die folgenden Zeichen:
    s \ {} $ . [ ] *

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$

Listing 8.4 Suche nach einem Stadtnamen

$ \gpfett{grep "^[hH]alle$" Standorte}
Halle

Vergessen Sie nicht, die regulären Ausdrücke in Anführungszeichen oder Hochkommata zu setzen. 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 müsste somit folgendermaßen aussehen:

Listing 8.5 Regulärer Ausdruck mit Escape-Sequenzen

\^\[hH\]alle\$


Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Rheinwerk-Shop: Linux Handbuch






 Linux Handbuch


Zum Rheinwerk-Shop: Linux Server






 Linux Server


Zum Rheinwerk-Shop: Raspberry Pi






 Raspberry Pi


Zum Rheinwerk-Shop: Ubuntu 14.04 LTS






 Ubuntu 14.04 LTS


Zum Rheinwerk-Shop: Roboter bauen mit Arduino






 Roboter bauen
 mit Arduino


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2012
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.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern