SED ersetzen-pattern mit Funktion berechnen

C

Cassiopeia

hallo shell-script freunde ;)

ich habe folgendes Problem, an dem ich schon seit Stunden hocke.

ich möchte eine Datei zeilenweise auslesen und in jeder Datei ein XML Tag der Form <xxx> durch ein HTML Tag ersetzen. Das Problem: Die Ersetzung soll dynamisch mit einer Funktion berechnet werden die als Übergabeparameter das XML-Tag enthält.
mit \1 kann ich ja auf gefunde Teilausdrücke zurgeifen, aber ich müsste auf diesen Teilausdruck auch außerhalb des SED-Kommandos zugreifen können.

also etwas in der Art:

Code:
grep ".*" "./$dataxml" | sed "s/<\([^<>]*\)>/ `FUNKTION \1` /g"

Aber das \1 ist steht in den Ausführungszeichen `` nicht mehr zur Verfügung...

Wie kann ich also \1 global speichern oder eine Funktion in SED einbetten und auf \1 zugreifen??

Wenn jemand ne Idee hat, oder mir wenigstens sagt, dass das unmöglich ist, dann würde mich freuen.
Vielen Dank im Voraus
 
Zuletzt bearbeitet von einem Moderator:
Hallo
Ich will nicht behaupten, dass das unmöglich ist.
Allerdings ist sed ein Editor, der nicht berechenen kann.
Die Referenzen innerhalb von sed sind selbstverständlich nicht Außerhalb sichtbar!

Wenn du also Funktionen und Eigenschaften von sed brauchst, dann nutze Perl oder AWK.
Das ist nämlich ein Grund, warum es diese gibt.
In deinem Versuch ist allerdings schon das grep überflüssig, weil sed selbst mit matching pattern arbeiten kann.

Abstrakter Ansatz ohne perl oder awk:
Code:
while read line 
VAR="$(echo $line|sed -e '/pattern/!d;s/\(foo\).*/\1/')"
# mach etwas mit VAR wenn nicht leer ...
# hier musst du dann sed noch mal für diese Zeile starten...
done< input

Das ist nur ein Fragment, was zeigen soll, wie uneffektiv hier die Arbeit mit sed ist!

Schau dir Perl oder zur Not auch AWK an, was Funktionen und Berechnungen nebst Regexp bietet.

Gruß Wolfgang
 

Ähnliche Themen

Squid nur zum maskieren der eigenen IP, nicht für Webserver auf port 80

Zurück
Oben