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 12/2017: Perfekte Videos

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

Broadcom Adapter 802.11n nachinstallieren
Thomas Mengel, 31.10.2017 20:06, 2 Antworten
Hallo, kann man nachträglich auf einer Liveversion, MX Linux auf einem USB-Stick, nachträglich...
RUN fsck Manually / Stromausfall
Arno Krug, 29.10.2017 12:51, 1 Antworten
Hallo, nach Absturz des Rechners aufgrund fehlendem Stroms startet Linux nicht mehr wie gewohn...
source.list öffnet sich nicht
sebastian reimann, 27.10.2017 09:32, 2 Antworten
hallo Zusammen Ich habe das problem Das ich meine source.list nicht öffnen kann weiß vlt jemman...
Lieber Linux oder Windows- Betriebssystem?
Sina Kaul, 13.10.2017 16:17, 6 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...