SED ersetzen-pattern mit Funktion berechnen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Cassiopeia, 30.11.2007.

  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. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #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. 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...
  2. 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...
  3. 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....
  4. FAI 5 mit Autodiscover-Funktion

    FAI 5 mit Autodiscover-Funktion: Die Entwickler des Softwarewerkzeugs zur vollautomatischen Installation von Betriebssystemen und Anwendungen haben mit FAI 5 eine neue Version des...
  5. Suse Linux Enterprise 11 SP4 verbessert Sicherheitsfunktionen

    Suse Linux Enterprise 11 SP4 verbessert Sicherheitsfunktionen: Suse hat das mittlerweile vierte Service Pack für Suse Linux Enterprise 11 veröffentlicht. Die neue Ausgabe liefert erweiterte...