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 02/2018: PAKETE VERWALTEN

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

sharklinux
Gerd-Peter Behrendt, 18.01.2018 23:58, 0 Antworten
Hallo zusammen, ich habe sharklinux von der DVD Installiert. 2x, jedesmal nach dem Reboot ist di...
Anfänger sucht Ratschläge
Alucard Nosferatu, 18.01.2018 21:56, 1 Antworten
Guten Tag, meine Wenigkeit würde gerne auf einer meiner Festplatten von meinen Feldrechnern e...
Suchprogramm
Heiko Taeuber, 17.01.2018 21:12, 1 Antworten
Hallo liebe Community, keine Ahnung ob dieses Thema hier schon einmal gepostet wurde. Ich hab...
Linux Mint als Zweitsystem
Wolfgang Robert Luhn, 13.01.2018 19:28, 4 Antworten
Wer kann mir helfen??? Habe einen neuen Laptop mit vorinstaliertem Windows 10 gekauft. Möchte g...
externe soundkarte Kaufempfehlung
lara grafstr , 13.01.2018 10:20, 3 Antworten
Hallo Ich bin auf Suche nach einer externen soundkarte.. Max 150 Euro Die Wiedergabe is...