Rückbesinnung in Perl

Perl beherrscht diese so genannten backward references natürlich perfekt. Innerhalb eines regulären Ausdrucks werden die numerischen Spezialvariablen \1 bis \9 mit dem Inhalt der Gruppen belegt. Zusätzlich erstellt Perl jedoch noch ganz normale Perl-Variablen, mit denen Sie auf die Fundstücke auch außerhalb des regulären Ausdrucks zugreifen können. Der Inhalt von \1 landet dabei in der Perl-Variablen $1, der Inhalt von \2 in $2 usw.

Ein kleines Beispiel aus einem primitiven Parser:

/^\s*From\s+(\w+)\s+Type\s+(\w+)\s+Seq\s+(\d+)\s+DB\s+(\w+)\s*$/i
    or die "Invalid pattern in packet: \"$_\"";
my ($from, $type, $seq, $db) = ($1, $2, $3, $4);

Jetzt enthalten die Variablen $from, $type, $seq und $db die jeweils gefundenen Strings. Bei der Eingabe

From mas Type ACK Seq 4219 DB Pharma

ist also $from = "mas", $type = "ACK", $seq = 4219 und $db = "Pharma".

Zusätzliche Perl-Funktionen

Unabhängig von Gruppen und Ähnlichem belegt Perl nach einer Suche noch weitere Variablen. Diese fasst Tabelle 3 zusammen.

Tabelle 3: Perl-Variablen nach einer erfolgreichen Suche

Name Bedeutung
$& Der letzte gefundene String, also das, worauf die Regexp gepasst hat.
$` (Apostroph rückwärts) Der Teil des Strings vor dem gefundenen Anteil.
$' (Apostroph vorwärts) Der Teil des Strings nach dem gefundenen Anteil. Nach einer erfolgreichen Suche wird der gesamte durchsuchte String zerlegt in $`$&$'.
$+ Die letzte passende Gruppe. Wenn Ihr regulärer Ausdruck mehrere Gruppenkonstrukte enthält, von denen einige optional sind, greifen Sie hiermit auf den Inhalt der letzten Gruppe zu.

Ohne Zweifel ist die Regexp-Engine von Perl eine der leistungsfähigeren im Unix-Umfeld. Ein paar praktische Perl-Einzeiler ermöglichen das unkomplizierte Herumprobieren auch an der Kommandozeile.

Mit dem folgenden Befehl wirkt Perl als grep-Ersatz, dabei werden alle Zeilen ausgegeben, die den regulären Ausdruck abc enthalten:

perl -ne 'print if /abc/' dateiname.txt

Perl agiert auch als sed-Ersatz. Im Beispiel wird die Regexp abc durch den Text def ersetzt und das Ergebnis am Bildschirm angezeigt:

perl -pe 's/abc/def/g' dateiname.txt

Der nächste Befehl wirkt ähnlich, allerdings ersetzen wir abc innerhalb der Datei durch def und lassen Perl eine Sicherheitskopie in dateiname.txt~ erstellen:

perl -pi~ -e 's/abc/def/g' dateiname.txt

Grundsätzlich verwenden Sie in Perl m/regexp/ oder einfach /regexp/ für die einfache Suche. Zum Suchen und Ersetzen benutzen Sie s/regexp/Ersatztext/. Nach dem letzten Schrägstrich können Sie einen der Modifikatoren aus Tabelle 4 anhängen.

Tabelle 4: Modifikatoren für reguläre Ausdrücke in Perl

Anhängsel an den letzten Schrägstrich Bedeutung
/i Suche ohne Beachtung von Groß- und Kleinschreibung.
/s Der Punkt passt auch auf Zeilenumbrüche innerhalb des durchsuchten Strings.
/m Der durchsuchte String darf mehrere Zeilen enthalten (ähnlich wie bei grep), wobei ^ und $ auch innerhalb des Strings immer für einen Zeilenanfang bzw. ein Zeilenende stehen.
/g Beim Suchen und Ersetzen: Nicht nur die erste Fundstelle wird ersetzt, sondern alle im String.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Praktisch und nützlich: AWK
    Ein Unix-Rechner erschlägt den Anwender förmlich mit kleinen Helferlein, die ihm so gerne zu Diensten wären. Leider lassen sie sich nicht immer ganz problemlos bedienen. Die Textbearbeitungssprache AWK ist ein typisches Beispiel.
  • Zu Befehl: Suchen mit grep, egrep, fgrep, (b)zgrep
    Für die Suche nach Wörtern und Ausdrücken in Textdateien bieten sich die Kommandos der grep-Familie an. Als Ergebnis zeigen sie wahlweise die gefundenen Zeilen, die Namen der Dateien, in denen das Suchmuster vorkommt, oder die Anzahl der Treffer an.
  • The Answer Girl
    Dass der Computeralltag auch unter Linux immer wieder für Überraschungen gut ist, ist eher eine Binsenweisheit: Immer wieder funktionieren Dinge nicht oder nicht so, wie eigentlich angenommen. Das Answer-Girl im Linux-Magazin zeigt, wie man mit solchen Problemchen elegant fertig wird.
  • Gut gefiltert
    Zu den häufigsten Aufgaben bei der Arbeit am Rechner zählt das Durchstöbern von Texten nach Suchmustern. Icgrep bietet hier eine moderne, parallel arbeitende und Unicode-fähige Alternative zum klassischen Grep.
  • Erste Schritte mit Regular Expressions
    Computer erleichtern die Arbeit – man muss ihnen nur genau sagen, was sie tun sollen. Mit regulären Ausdrücken beschleunigen Sie das Suchen und Ersetzen von Zeichenketten auf elegante Art.
Kommentare

Infos zur Publikation

LU 05/2018: GEODATEN

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

Kein Mikrofon Ton über die Lausprecher
Marvin Schimmelfennig, 23.04.2018 17:39, 2 Antworten
wenn ich ein externes Mikrofon anschließe kommt kein Ton raus. aber der Pegel schlagt aus wenn i...
added to access control list
Ingrid Kroll, 27.03.2018 07:59, 10 Antworten
Hallo allerseits, bin einfache Nutzerin und absolut Linux-unwissend............ Beim ganz norm...
Passwortsicherheit
Joe Cole, 15.03.2018 15:15, 2 Antworten
Ich bin derzeit selbständig und meine Existenz hängt am meinem Unternehmen. Wahrscheinlich verfol...
Brother drucker einrichten.
Achim Zerrer, 13.03.2018 11:26, 1 Antworten
Da mein Rechner abgestürzt war, musste ich das Betriebssystem neu einrichten. Jetzt hänge ich wi...
Internet abschalten
Karl-Heinz Hauser, 20.02.2018 20:10, 2 Antworten
In der Symbolleiste kann man das Kabelnetzwerk ein und ausschalten. Wie sicher ist die Abschaltu...