News Ticker

Reguläre Ausdrücke 9: Zeilenanfang und -ende

Die bis jetzt vorgestellten Regeln sind alle schön und gut, aber es fehlt immer noch etwas Salz an der Suppe. Was ist z.B. wenn ich Ausdrücke nicht irgendwo suche, sondern an einer bestimmten Position - z.B. am Zeilenanfang oder am Zeilenende. Natürlich gibt es auch dafür Metazeichen in der Welt der regulären Ausdrücke. Die zwei Zeichen, welche Zeilenanfang und -ende markieren, sollen heute vorgestellt werden.

Regel 9a
Das Hütchen (^) steht für den Zeilenanfang. Alle nachfolgenden Zeichen müssen demnach am Zeilenanfang stehen. Das Zeichen ist nicht zu verwechseln mit dem Konverter der Zeichenklassen, welcher nur in eckigen Klammern vorkommen darf ([^0-9]).

Regel 9b
Das Dollarzeichen steht für das Zeilenende. Alle vorhergehenden Zeichen müssen also direkt vor dem Zeilenende stehen.

Genug der Theorie; etwas Praxis:

tcr@triton ~ $ cat datei
tttraumschiff
 ttraumschiff
  traumschiff
   raumschiff
 
tcr@triton ~ $ egrep "^[ ]" datei
 ttraumschiff
  traumschiff
   raumschiff
tcr@triton ~ $ egrep "^$" datei
 
tcr@triton ~ $

Um die Zeichen zu verdeutlichen, habe ich unsere allseits bekannte traumschiff-datei etwas verändert. Der erste reguläre Ausdruck (^[ ]) sucht nach genau einem Leerzeichen am Zeilenanfang. Wie viele dahinter folgen, ist uninteressant. Man könnte dies z.B. mit der Mengenangabe präzisieren und mit ^[ ]{3} nach genau drei Leerzeichen am Zeilenanfang suchen.

Der zweite Ausdruck sucht ganz einfach nach einem Zeilenanfang und einem Zeilenende und dazwischen gähnender Leere – mit anderen Worten: eine leere Zeile. Da die letzte Zeile in der Datei eine Leerzeile ist, wird diese ausgegeben.

Diese zwei Zeichen ergänzen unser Arsenal an Ausdrücken sehr. Nun ist es leicht möglich Textdateien nach kleinen Tippfehlern zu durchsuchen. Der CLI-Editor vim z.B. arbeitet (bei mir) nicht gut zusammen mit dem X-Zwischenspeicher beim Copy&Paste. Er fügt viele Leerzeichen am Anfang jeder Zeile ein. Das ist jetzt kein Problem mehr. Oder auch Quellcode kann man schön (und vorsichtig) damit aufräumen. Leerzeichen nach einem ; sind mein ewiger Feind. Mit etwas mehr Finesse könnte man nach mehr als einer Leerzeile suchen. Die Liste ist lang und abhängig vom Benutzer. Lasst euch einfach inspirieren!