Variablen bei sed-Ausdrücken

Problem: Beim Suchen und Ersetzen eines Strings in einer Textdatei mit dem Linux-Programm sed (Stream Editor) trat das Problem auf, dass bei der Verwendung von Shellvariablen als Suchmuster der gewünschte Text, also der Wert der Variablen, nicht durch den Zieltext ersetzt wurde. Ein Test ohne Variablen funktionierte aber ohne Probleme.

sed ’s/suchmuster/zieltext/g‘ Eingabedatei > Ausgabedatei
mv Ausgabedatei Eingabedatei

ersetzte den Text „suchmuster“ in der „Eingabedatei“ mit dem Text „zieltext“ und schrieb das Ergebnis in die „Ausgabedatei“.

Folgendes funktionierte aber nicht:

suchmuster=“das ist der quelltext“
zieltext=“das ist der zieltext“
sed ’s/$suchmuster/$zieltext/g‘ Eingabedatei > Ausgabedatei
mv Ausgabedatei Eingabedatei

Der Text „das ist der quelltext“ wurde nicht durch den Text „das ist der zieltext“ ersetzt.

Lösung: Durch eine Suchmaschinenrecherche fand ich die Lösung. Sed wertet den Inhalt von Variablen nicht aus, wenn man einfache Anführungszeichen (‚) beim Erstellen des Ausdrucks verwendet. Ersetzt man die einfachen Anführungszeichen durch doppelte Anzührungszeichen („), werden zuerst die Variablen expandiert und dann erst der Sed-Ausdruck ausgeführt.

Der funktionierende Code sah dann so aus:

suchmuster=“das ist der quelltext“
zieltext=“das ist der zieltext“
sed s/$suchmuster/$zieltext/g Eingabedatei > Ausgabedatei
mv Ausgabedatei Eingabedatei

Quelle: http://www.unixboard.de

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert