Reguläre Ausdrücke, häufig als Regex abgekürzt, beschreiben Textmuster. Werkzeuge wie grep, sed und awk verwenden Regex, unterstützen jedoch möglicherweise unterschiedliche Syntax. Ermittle deshalb immer das Werkzeug und die verwendete Regex-Variante.
Fortgeschrittenes Text-Fu · Lektion 1
Regex (Reguläre Ausdrücke)
Lerne, wie Anker, Zeichensätze, Wiederholungen und Regex-Varianten den Textabgleich steuern.
GNU grep verwendet standardmäßig einfache reguläre Ausdrücke (BRE) und mit -E erweiterte reguläre Ausdrücke (ERE). Diese Lektion führt zunächst gemeinsame Konstrukte ein und nennt danach verbreitete ERE-Erweiterungen.
Für die Beispiele dient diese Eingabe:
sally sells seashells
by the seashore
Wörtlichen Text abgleichen
Die meisten gewöhnlichen Zeichen stehen für sich selbst. Das Muster seashells wählt eine Zeile aus, die genau diese Zeichenfolge an beliebiger Stelle enthält:
$ grep 'seashells' sample.txt
sally sells seashells
Setze Regex-Muster in Anführungszeichen, damit die Shell sie nicht erweitert oder aufteilt, bevor das Werkzeug sie erhält. Regex unterscheidet sich außerdem von der Shell-Pfaderweiterung: In einem regulären Ausdruck wiederholt * das vorangehende Element; in einem Shell-Glob ist * selbst ein Platzhalter für eine Zeichenfolge in Pfadnamen.
Was bewirkt * in einem regulären Ausdruck wie ab*?
Einen Treffer verankern
Außerhalb eines Klammerausdrucks verankert ^ am Musteranfang den Treffer am Zeilenanfang:
^by
Der Anker $ passt auf das Zeilenende:
seashore$
Kombiniere beide Anker, wenn die gesamte Zeile dem Muster entsprechen muss:
^by the seashore$
Welches Muster passt ausschließlich auf eine Zeile, deren vollständiger Text by the seashore lautet?
Ein Zeichen abgleichen
Der Punkt steht im gewöhnlichen zeilenorientierten Regex-Modus für ein Zeichen:
b.
Das passt auf by, könnte aber auch ba oder b7 treffen. Auf ein einzelnes b passt es nicht, weil danach ein Zeichen erforderlich ist. Einen wörtlichen Punkt schützt du als \. oder setzt ihn in einen geeigneten Klammerausdruck.
Welche Zeichenfolge wird vom Ganzzeilenmuster ^b.$ nicht getroffen?
Klammerausdrücke verwenden
Ein Klammerausdruck passt auf ein Zeichen aus einer angegebenen Menge:
s[ae]lls
An dieser Stelle passt das auf sells oder salls.
Steht ^ als erstes Zeichen nach [, negiert es die Menge:
s[^e]lls
Das passt auf salls, aber nicht auf sells, weil das Zeichen hinter dem ersten s kein e sein darf.
Worauf passt [^e]?
Bereiche beschreiben Zeichen zwischen zwei Endpunkten:
d[a-c]g
Dies kann auf dag, dbg oder dcg passen. Das Verhalten von Bereichen kann von der Locale-Kollation abhängen. Zeichenklassen wie [[:lower:]], [[:upper:]] und [[:digit:]] drücken die Absicht häufig klarer aus.
Muster wiederholen und kombinieren
Sowohl in BRE als auch in ERE bedeutet * null oder mehr Wiederholungen des vorangehenden Elements:
seashells*
Das passt auf seashell, gefolgt von null oder mehr zusätzlichen s. Im ERE-Modus mit grep -E stehen unter anderem diese Operatoren zur Verfügung:
+: Eine oder mehrere Wiederholungen.?: Null oder eine Wiederholung.|: Der linke oder der rechte Ausdruck.(...): Gruppiert Ausdrücke.
Zum Beispiel:
$ grep -E '^(cat|dog)s?$' animals.txt
Damit werden vollständige Zeilen cat, cats, dog oder dogs ausgewählt. Im BRE-Modus gelten für diese Operatoren andere Maskierungsregeln; übertrage ein Muster daher nicht ungeprüft zwischen Varianten.
Welcher Befehl aktiviert für das Muster ^(cat|dog)s?$ die erweiterte Regex-Syntax?
Mit diesen Übungen kannst du die Auswahl durch reguläre Ausdrücke praktisch trainieren:
- Text mit grep unter Linux suchen – Suche mit
grepnach Text, zeige Zeilennummern an und verwende Anker wie^und$sowie grundlegende und erweiterte reguläre Ausdrücke. - Textverarbeitung und reguläre Ausdrücke – Nutze grep, sed, awk und reguläre Ausdrücke zur effizienten Textverarbeitung und Mustersuche.
- Extrahieren von E-Mails und Zahlen – Extrahiere mit grep und regulären Ausdrücken E-Mail-Adressen und Zahlen aus einer Datei.
Lektion abgeschlossen
Sie haben Regex (Reguläre Ausdrücke) abgeschlossen
Du kannst nun grundlegende zeilenorientierte reguläre Ausdrücke lesen und erstellen.
Unterscheide Regex-Operatoren von Shell-Pfadplatzhaltern.
Verankere Treffer am Anfang oder Ende einer Zeile.
Gleiche ein Zeichen mit einem Punkt oder Klammerausdruck ab.
Negiere Mengen und verwende localeabhängige Zeichenklassen.
Wähle BRE- oder ERE-Syntax bewusst.
Lernfortschritt speichern
Erstellen Sie ein kostenloses Konto, um diese Lektion zu speichern und auf jedem Gerät weiterzulernen.
Kostenloses Konto erstellen