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 11/2017: Server für Daheim

Digitale Ausgabe: Preis € 8,50
(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

Lieber Linux oder Windows- Betriebssystem?
Sina Kaul, 13.10.2017 16:17, 3 Antworten
Hallo, bis jetzt hatte ich immer nur mit
IT-Kurse
Alice Trader, 26.09.2017 11:35, 2 Antworten
Hallo liebe Community, ich brauche Hilfe und bin sehr verzweifelt. Ih bin noch sehr neu in eure...
Backup mit KUP unter Suse 42.3
Horst Schwarz, 24.09.2017 13:16, 3 Antworten
Ich möchte auch wieder unter Suse 42.3 mit Kup meine Backup durchführen. Eine Installationsmöglic...
kein foto, etc. upload möglich, wo liegt mein fehler?
kerstin brums, 17.09.2017 22:08, 5 Antworten
moin, zum erstellen einer einfachen wordpress website kann ich keine fotos uploaden. vom rechne...
Arch Linux Netzwerkkonfigurationen
Franziska Schley, 15.09.2017 18:04, 0 Antworten
Moin liebe Linux community, ich habe momentan Probleme mit der Einstellung des Lan/Wlan in Arc...