Sven Rautenberg: RegEx via Kommandozeile

Beitrag lesen

Moin!

Ich hab leichte Probleme, einem Perl-Script meine Wünsche hinsichtlich eines regulären Ausdrucks verständlich zu machen.

Ausgangslage: Ich habe einen Batzen HTML-Dateien, die ein paar unerwünschte Formatierungen drin haben. Diese Formatierungen lassen sich im Prinzip alle recht schön mit regulären Ausdrücken suchen und ersetzen.

Dazu habe ich mir von Ulli Meybohm sein Skript "rxr" geholt. Das Skript nimmt als Kommandozeilenparameter einen oder zwei Parameter entgegen, um damit den regulären Ausdruck zu füttern. Das Thema "Escapen von für die Kommandozeile relevanten Zeichen" habe ich schon hinter mir - die Ausdrücke strotzen jetzt vor Backslashes.

Das Problem:
find * | grep ".HTM" | rxr <H3>(.*?)<\/H3> <p><strong>$1</strong></p>
Diese Kommandozeile soll z.B. nach allen Überschriften <h3> suchen diese in <p><strong></strong></p> umwandeln. Das Problem ist: Der ersetzte Ausdruck lautet wortwörtlich <p><strong>$1</strong></p> - der Inhalt der ersten Klammer wird leider nicht wieder eingesetzt.

Ich hab schon so einiges probiert. Ich bin mir relativ sicher, dass ich $1 nehmen muß - \1 habe ich aber auch schon probiert. Ich lasse mir auch ausgeben, was das Skript als Werte für die Ersetzung übergeben kriegt - das ist alles einwandfrei:
print "Replacing Operation: s/$searchfor/$replacewith/igse\n";
ergibt:
Replacing Operation: s/<H3>(.*?)</H3>/<p><strong>$1</strong></p>/igse
bei oben angegebener Kommandozeile.

Die eigentliche "Arbeitszeile" lautet:
$fullline =~ s/$searchfor/$replacewith/igse;
(Das restliche Skript ist unter http://homepages.fh-giessen.de/~hg8444/src/rxr.gz zu finden.)

$fullline enthält die jeweilige komplette HTML-Datei, in $searchfor steht der erste Parameter, in $replacewith der zweite Parameter.

Vielleicht kann mir ja ein Perl-Regex-Experte verraten, wie ich es schaffe, die Klammervariablen per Kommandozeilenparameter in den regulären Ausdruck einzuschleusen. Ich habe leider keine guten Ideen mehr.

Alternativen wären natürlich auch nicht schlecht. Ich hatte kurz über sed nachgedacht, aber der muß ja auch irgendwie alle Dateien einzeln serviert kriegen - also besteht wieder ein Aufwand, das zu programmieren...

- Sven Rautenberg

--
"Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)