SED ersetzen-pattern mit Funktion berechnen

Diskutiere SED ersetzen-pattern mit Funktion berechnen im Shell-Skripte Forum im Bereich Programmieren unter Linux/Unix; hallo shell-script freunde ;) ich habe folgendes Problem, an dem ich schon seit Stunden hocke. ich möchte eine Datei zeilenweise auslesen...

  1. #1 Cassiopeia, 30.11.2007
    Zuletzt bearbeitet: 30.11.2007
    Cassiopeia

    Cassiopeia Grünschnabel

    Dabei seit:
    30.11.2007
    Beiträge:
    1
    Zustimmungen:
    0
    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
     
  2. #2 Wolfgang, 30.11.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    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
     
Thema:

SED ersetzen-pattern mit Funktion berechnen

Die Seite wird geladen...

SED ersetzen-pattern mit Funktion berechnen - Ähnliche Themen

  1. Unix Shell Funktionen funktionieren nicht

    Unix Shell Funktionen funktionieren nicht: Guten Tag Ich hoffe sehr, dass Sie mir weiterhelfen können, denn ich habe ein riesiges Problem: Zurzeit arbeite ich mit meinem Server an einem...
  2. Shell: Funktion ls Not found

    Shell: Funktion ls Not found: Hallo zusammen. Ich habe vor längerer Zeit mal mit Ubuntu gearbeitet wo ich auch ein paar befehle im Terminal gelernt habe. Nun zu meinem...
  3. CentOS 7.2: Mailversand funktioniert obwohl nicht definiert

    CentOS 7.2: Mailversand funktioniert obwohl nicht definiert: Hallo Habe CentOS 7.2 installiert/konfiguriert. Testweise habe ich eine mail versendet: mail -s "test mail" email@adresse.de May 25 15:45:04...
  4. In eigener Sache: Neue, stark verbesserte Suchfunktion

    In eigener Sache: Neue, stark verbesserte Suchfunktion: Pro-Linux läuft nun mit der erneuerten Version 1.5 des Content Management Systems NB3. Die wichtigste sichtbare Änderung ist die neue, auf der...
  5. Funktionssuche in C: Emacs oder Vim?

    Funktionssuche in C: Emacs oder Vim?: Hallo, ich muss mir häufig C-Projekte angucken, und dann suche ich bspw., wo eine aufgerufene Funkion definiert oder deklariert (Header) wird....