sed mit pathvariable als ersetzungsparameter

N

Nano

Foren As
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
 
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...
 
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
 
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
doch, genau das ist sinn der sache...

ich möchte nun die datei permanent ändern, unter der GNU version von sed würde das mit -i funktionieren leider [...]
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...
 
Zuletzt bearbeitet:

Ähnliche Themen

Zugriff Ubuntu 16.04. auf Freigabe 18.04. LTS nicht möglich

Wertebereich ersetzen mit sed

Script zur Korrektur einer E-Book Datei

Wie verschiedene Pattern in diversen Dateinamen finden und ersetzen?

Probleme mit sed: im Text eine Zeile in Großbuchstaben ?

Zurück
Oben