Bitte keine Rechnernamen!

Idiotensicher ist die ganze Prozedur jedoch noch nicht: Textstellen wie

1.5MB
03.08.1999

werden ebenfalls von unserem regulären Ausdruck erfasst, obwohl es sich hierbei nicht um Dateinamen handelt. Ebenso werden Rechnernamen aus URLs (www.linux-magazin.de) fälschlicherweise mitgenommen.

Das bekommen wir zumindest in korrekten HTML-Dateien recht gut hin: Darin werden verknüpfte Dateien und URLs in Anführungszeichen gesetzt. Wenn wir ans Ende unseres Suchmusters noch ein – natürlich "escaptes" – " setzen:

[[:alnum:]_-]\+\.[[:alnum:]]\{3,4\}\"

schließen wir zumindest die meisten Zufallstreffer im Fließtext aus. Das Problem mit den Rechnernamen haben wir noch nicht ganz gelöst: Zwar klappt das mit vorbildlichen URLs wie A HREF="http://www.linux-magazin.de/", nicht jedoch, wenn der abschließende Slash fehlt und die Topleveldomain dreibuchstabig ist: A HREF="http://www.linux-mandrake.com". Hier könnten wir noch vorgeben, dass vor dem Suchmuster niemals ein Punkt stehen darf:

[^\.][[:alnum:]_-]\+\.[[:alnum:]]\{3,4\}\"

Das ^ invertiert die Zeichenmenge innerhalb der eckigen Klammer und meint damit "alle Zeichen außer dem (zu schützenden) Punkt".

Ein Problem bleibt: Wer mit einem Link direkt eine Textmarke in einem Dokument anspringt ("datei.html"), erwischt diesen Dateinamen natürlich nicht. Doch was hindert uns daran, nicht nur das Ausführungszeichen als Dateinamenende zuzulassen, sondern auch das Hashzeichen?

[^\.][[:alnum:]_-]\+\.[[:alnum:]]\{3,4\}[\"#]

Dieser gesamte Ausdruck passt demnach auf alle Zeichenketten innerhalb einer Zeile, die

  • mit einem Zeichen beginnen, das kein (^) Punkt (\.) ist,
  • auf das mindestens ein Zeichen (\+) folgt, das ein Buchstabe oder eine Zahl ([:alnum:]), ein Unterstrich (_) oder ein Minus (-) ist.
  • Daraufhin folgt ein Punkt (\.),
  • und danach kommen drei oder vier (\{3,4\}) alphanumerische ([:alnum:]) Zeichen.
  • Die Zeichenkette wird abgeschlossen durch ein Anführungszeichen (\") oder ein Hash (#).

Ersetz mir mal…

Natürlich ließe sich unser Suchmuster noch verfeinern und perfektionieren, doch belassen wir es an dieser Stelle dabei und fangen endlich an, nicht nur zu suchen, sondern auch zu ersetzen. Dazu eignet sich – wie wir schon in Heft 10/99 gesehen haben – die Skriptsprache perl am besten.

perl -pe macht es – ähnlich -e – möglich, eine als Argument angegebene Datei Zeile für Zeile durch einen auf der Kommandozeile angegebenen, aus Perl-Kommandos bestehenden Filter zu schicken (-e steht für "execute") und das Ergebnis auch noch auf dem Bildschirm ausgedruckt (-p wie "print") zu bekommen.

Der Filter ist relativ einfach gefunden: Suche unseren regulären Ausdruck und s wie substituiere ihn mit sich selbst, wobei der Dateiname komplett in Kleinbuchstaben gewandelt wird. Netterweise schreibt uns Perl nicht fest vor, welches Sonderzeichen wir zum Abtrennen von Suchmuster und Ersatzstück verwenden sollen: Der zum Beispiel von sed bekannte / ist möglich, das Hashzeichen oder auch das Fragezeichen. Bei der Auswahl eines Trennzeichens sollten wir lediglich aufpassen, dass das Zeichen selbst nicht irgendwo referenziert wird, denn sonst sind Escape-Orgien angesagt, und da vertippt man sich nur allzu leicht… An dieser Stelle vermeiden wir also ganz eindeutig das # und versuchen unser Glück mit ?.

Bevor wir uns jetzt schon mit dem Ersatzmuster herumschlagen, prüfen wir zunächst, ob unser mühsam zusammengestückelter regulärer Ausdruck auch unter Perl besteht: Versuchen wir doch einfach, die verlinkten Dateinamen in der Datei index.html auffällig durch ___ zu ersetzen. Natürlich verändern wir dabei nicht die Datei selbst, sondern lassen die veränderten Daten erstmal durch den Pager less seitenweise auf dem Bildschirm ausgeben. Mit der am Ende angegebenen g-("global"-)Option sorgen wir dafür, dass nicht nur das erste, sondern alle auf einer Zeile auftretenden Fundstellen ersetzt werden:

perl -pe "s?[^\.][[:alnum:]_-]\+\.[[:alnum:]]\{3,4\}[\"#]?___?g" |less

LinuxCommunity kaufen

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

Deutschland

Ähnliche Artikel

  • Reguläre Ausdrücke
    Regulären Ausdrücken begegnet man auf Unix-Systemen an allen Ecken und Enden. Doch was genau hat es damit auf sich, und wie nutzt man sie?
  • The Answer Girl
    Lauter kaputte Links in Webseiten, nur weil bei ihrer Erstellung Groß- und Kleinschreibung unbeachtet blieb? Dieses Problem lässt sich zum Beispiel mit einem Perl-Skript lösen.
  • The Answer Girl
    Solange man online ist, halten sich die Sprachprobleme in Grenzen: Web-Wörterbücher wie dict.leo.org helfen in meistens akzeptabler Geschwindigkeit über die Hürden des fehlenden (Englisch-) Wortschatzes hinweg. Doch wehe, man ist weder mit Standleitung noch Flatrate gesegnet: Schon ärgert man sich, das Regal mit den papiernen Wörterbüchern am anderen Ende des Raums aufgestellt zu haben.
  • Sauber verzahnt
    Verbinden, trennen, umformatieren: Unter Linux gibt es zahlreiche kleine Helfer, die die Arbeit mit Textdateien perfekt beherrschen – und die dazu noch perfekt zusammenarbeiten.
  • 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, 0 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...