sed: Text ersetzen mit variablen

D

dampfhammer

Grünschnabel
Hallo allerseits!

Wollte mir ein Script schreiben, welches einen bestimmten String in einem Textfile mit einem anderen ersetzt.

An und für sich funktioniert das Script. Jedoch nur solange, bis ich im Suchmuster einen Leerschlag drin habe...
Wobei die Variable $sedstring (s. Script) den Korrekten Output liefert. Derselbe Befehl auf der Kommandozeile ausgeführt funktioniert auch...

Hoffe jemand von Euch weiss rat..! :think: Danke & Gruss



echo "Wo sind die Textfiles abgelegt (/var/named/)?
"
read dir
ls -1 $dir > /tmp/zonefiles
#
echo "Welcher Wert soll ersetzt werden?
"
read initstring
echo "Wie lautet der neue Wert?
"
read replacestring
sedstring=""s/$initstring/$replacestring/g""
for files in `cat /tmp/zonefiles`
do
echo "Editiere File $dir/$files
"
sed $sedstring $dir/$files
done && echo "Files erfolgreich angepasst!
"
rm /tmp/zonefiles
 
Was ist ein Leerschlag? Egal, ersetz mal folgende Zeile

Code:
sedstring=""s/$initstring/$replacestring/g""

durch

Code:
sedstring="'s/$initstring/$replacestring/g'"

Gruss, Xanti
 
Xanti schrieb:
Was ist ein Leerschlag? Egal, ersetz mal folgende Zeile

Code:
sedstring=""s/$initstring/$replacestring/g""

durch

Code:
sedstring="'s/$initstring/$replacestring/g'"

Gruss, Xanti
Hallo
Wenn du mit Variablen der shell arbeiten willst, darfst du diese nicht in einfache Hochkomma setzen, sonst wird die Variable nicht aufgelöst.
Code:
sedstring="s/$initstring/$replacestring/g"
sed -e "$sedstring"

Gruß Wolfgang
 
Hallo Wolfgang, die Wirkung von ' wird innerhalb der Gänsefüsse " aufgehoben:

Code:
[~]$ a=123
[~]$ b="'$a'"
[~]$ echo $b
'123'

Gruss, Xanti
 
Xanti schrieb:
Hallo Wolfgang, die Wirkung von ' wird innerhalb der Gänsefüsse " aufgehoben:

Code:
[~]$ a=123
[~]$ b="'$a'"
[~]$ echo $b
'123'

Gruss, Xanti

Ups, du hast Recht.
Hab ich noch nie so benutzt, hab dafür immer andere Lösungen gefunden.

Gruß Wolfgang (die Hitze raubt mir den Verstand)

EDIT://
Zu den möglichen Leerzeichen im Suchstring:
Verwende für die Parameter für sed einfach ein Array:
Code:
VAR1="a b"
VAR2="A   C"
REPLACE=(-e "s/$VAR1/$VAR2/g");
echo "a b cdefg a b"|sed "${REPLACE[@]}"
A   C cdefg A   C
 
Zuletzt bearbeitet:
Hallo Wolfgang
Klasse, funktioniert bestens - vielen Dank!

Irgendwie jedoch trotzdem komisch, dass der Output (bei meiner Version) der Variable $sedstring an und fuer sich korrekt ist, es aber dennoch nicht funktioniert..

@Xanti: Leerschlag = " " ;-)

Gruss Dampfhammer
 
Wolfgang schrieb:
...
Gruß Wolfgang (die Hitze raubt mir den Verstand)
...

Yep, die Hitze ist echt nervig, besonders hier, da ich unterm Dach hocke. Aber es hat gerade mit regnen angefangen, hoffen wir auf Abkühlung.

@dampfhammer Nur interessehalber: hat meine Lösung auch funktioniert?

Gruss, Xanti
 
Hallo Xanti
Ich probierte die Variante schon aus, bevor ich hier postete. Leider funktionierts im Script auch nicht, auf der Kommandozeile jedoch schon...

Danke dennoch für die Unterstützung!

Gruss dampfhammer
 

Ähnliche Themen

Wie komme ich an den Inhalt des Inhalts einer Variable?

Bash Skript: [[: not found Fehler

MySQL-Abfrage an Variable übergeben

Last mit etc/passwd anzeigen lassen

NagiosGrapher 1.7.1 funktioniert nicht

Zurück
Oben