sed mit pathvariable als ersetzungsparameter

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Nano, 26.02.2008.

  1. Nano

    Nano Foren As

    Dabei seit:
    02.12.2006
    Beiträge:
    93
    Zustimmungen:
    0
    Hi folgendes problem :

    Code:
    
    sed -e "s/a/$BASH/g" dateiname
    
    
    ich möchte also alle a's durch den bashpath ersetzen lassen der in diesem fall in der form /bla/bla/bla ist nun wird die variable aber aufgelöst und
    es kommt die fehlermeldung :


    sed: Befehl verstümmelt: s/a//usr/bin/bash/g

    wohl aufgrund dessen das der path mit / beginnt

    meine idee dann
    Code:
    sed -e "s/a/\$BASH/g"
    
    zu nutzen brachte leider nichts ( der \ sollte den ersten \ des paths als normales zeichen interpretieren )

    ich weiss das es einige threads hier gibt die sich mit dem problem der variable bei sed befassen, aber leider mit diesem speziellen
     
  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 Gott_in_schwarz, 26.02.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    du musst das trennsymbol ändern, wenn es nicht zu kompliziert ausarten soll:
    Code:
    sed -e "s#a#$BASH#g" dateiname
    BTW: was ist ein basepath? der pfad wo das bash binary drin steckt? oder meinst du das aktuelle arbeitsverzeichnis? das ist nämlich in $PWD "versteckt".

    hm, hier eine variante, wo das trennsymbol nicht geändert werden muss:
    Code:
    sed -e "s/a/$(echo $BASH|perl -pe 's/\//\\\//g')/" dateiname
    du siehst sicherlich ein, dass es einfacher ist, einfach das trennsymbol zu wechseln...
     
  4. Nano

    Nano Foren As

    Dabei seit:
    02.12.2006
    Beiträge:
    93
    Zustimmungen:
    0
    hm ja klasse , wusste nicht das man es einfach so ändern kann danke,
    und noch eine frage
    ich möchte nun die datei permanent ändern, unter der GNU version von sed würde das mit -i funktionieren leider arbeite ich unter solaris sunos5.10 ...

    was funktioniert ist

    Code:
    
    sed -e "s#a#b#g" $datei1 > $datei
    
    
    sofern $datei1 != $datei ist funktionert das auch anderenfall erhält man eine leere datei.
    und das ganze zwischen zu speichern eine datei zu löschen und neu zu beschrieben wäre zwar eine möglichkeit aber nicht sinn der sache
     
  5. #4 Gott_in_schwarz, 26.02.2008
    Zuletzt bearbeitet: 26.02.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    doch, genau das ist sinn der sache...

    permanent wird die datei auch geändert, wenn du es über eine temporäre datei machst...

    Code:
    sed -e "s/a/b/g" infile > tmp_outfile && mv -f tmp_outfile infile
    und alles ist in ordnung...

    ansonsten kannst ja schauen, ob du dir einfach gnu sed installieren kannst, ich hab gehört das soll recht kostengünstig sein...

    edit: btw zu deinem ersten posting:
    Code:
    sed -e "s/a/\$BASH/g"
    das hätte das dollarzeichen escaped und dadurch die variable expansion seitens der shell verhindert...
     
  6. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

sed mit pathvariable als ersetzungsparameter