sed ersetzt Variable mit nicht mit ihrem Wert

F

FrozenFox

Grünschnabel
Hallo allerseits! :)

Ich hab mir ein kleines Shell-Script gebastelt, dass bestimmte Wörter in einer Datei durch andere ersetzt. Dazu habe ich sed genommen:
Code:
#!/bin/bash
...
sed 's/Basis-Template/$subdomain/g' $template > $filename
sed 's/subdomain.template.at/$subdomain/g' $template > $filename
...
das ganze funktioniert auch so wie es soll :)

Nur diese Zeile macht nicht was sie soll:
Code:
...
sed 's/\/www\/docs\/template\/subdomain/$target/g' $template > $filename
...
in der Datei wird nämlich /www/docs/template/subdomain durch $target anstatt dem Wert von $target ersetzt.

Kann mir jemand sagen warum das so ist?

Vielen Dank im Vorraus für jede Antwort!

MFG
FrozenFox
 
Versuch mal " " statt ' '

Code:
sed "s/\/www\/docs\/template\/subdomain/$target/g" $template > $filename
 
Die Antwort auf das Warum:
Die einfachen Hochkomma verhindern das Auflösen der Shellvariable durch die Shell. sed wiederum kennt keine SHELL-Variablen.

Gruß Wolfgang
 
Ist normales Verhalten: ' ' unterdrückt / verhindert Interpolation von Variablen, also nimmst du " ".
 
Ist normales Verhalten: ' ' unterdrückt / verhindert Interpolation von Variablen, also nimmst du " ".

Tja, das hab ich mir auch gedacht, aber aus 2 Gründen kann das so nicht ganz stimmen:

1)
Code:
sed 's/Basis-Template/$subdomain/g' $template > $filename
sed 's/subdomain.template.at/$subdomain/g' $template > $filename
hier funktioniert es ja auch mit '

2)
Code:
sed "s/\/www\/docs\/template\/subdomain/$target/g" $template > $filename
führt zu bei diesem Aufruf:
./test.sh heute.neu.at /www/docs/neu/heute
diesem Fehler:
sed: couldn't open file ww/docs/neu/heute/g: No such file or directory

Wo liegt also wirklich der Fehler? :hilfe:

MFG
FrozenFox
 
nimm mal sicherheitshalber statt dem / ein anderes Trennzeichen z.B. #
also 's#/www/huhu/#ersetzung#g'
 
nimm mal sicherheitshalber statt dem / ein anderes Trennzeichen z.B. #
also 's#/www/huhu/#ersetzung#g'

Gute Idee! (wusste gar nicht, dass man das Trennzeichen ändern kann)

Leider ist das Ergebnis von
Code:
sed 's#/www/docs/template/subdomain#$target#g' $template > $filename
aber dasgleiche wie
Code:
sed 's/\/www\/docs\/template\/subdomain/$target/g' $template > $filename

Sonst noch Vorschläge?

MFG
FrozenFox
 
Verwendest du eine aktuelle 'GNU sed' Version?
Code:
$ sed --version
GNU sed Version 4.1.5
Copyright (C) 2003 Free Software Foundation, Inc.
Gruss
d22
 
Verwendest du eine aktuelle 'GNU sed' Version?
Code:
$ sed --version
GNU sed Version 4.1.5
Copyright (C) 2003 Free Software Foundation, Inc.

Nicht ganz wie es aussieht, aber kann es echt daran liegen:
Code:
sed --version
GNU sed version 4.1.4
Copyright (C) 2003 Free Software Foundation, Inc.

MFG
FrozenFox
 

Ähnliche Themen

[Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter

Zeielenblock von einer Datei in eine neue schreiben

MySQL-Abfrage an Variable übergeben

Mehrzeiligen String mittels sed ersetzen

sed: -e Ausdruck #1, Zeichen 6: unknown option to `s'

Zurück
Oben