ubuntuusers.de

Suchen und Ersetzen mit sed und Variablen

Status: Gelöst | Ubuntu-Version: Xubuntu 18.04 (Bionic Beaver)
Antworten |

Fried-rich

Anmeldungsdatum:
2. Mai 2013

Beiträge: 1162

Hallo,

folgender code funktioniert irgendwie nicht

sed -i 's/abc[0-9]\{7\}/abc$var/g' file

Hier wird nicht der Inhalt der vorher gefüllten variablen eingesetzt sondern genau was dort steht. Auch mit \$ geht es nicht. Was ist hier falsch?

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17623

Wohnort: Berlin

Fried-rich schrieb:

Hallo,

folgender code funktioniert irgendwie nicht

sed -i 's/abc[0-9]\{7\}/abc$var/g' file

Hier wird nicht der Inhalt der vorher gefüllten variablen eingesetzt sondern genau was dort steht. Auch mit \$ geht es nicht. Was ist hier falsch?

Die einfachen Apostrophe maskieren den Dollar. Mit Doppelten würde es gehen:

sed -i "s/abc[0-9]\{7\}/abc$var/g" file

Oder die Maskierung vor der Variablen aufheben:

sed -i 's/abc[0-9]\{7\}/abc'$var'/g' file

oder wohl auch

sed -i 's/abc[0-9]\{7\}/abc'$var/g file

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

Wohnort: Göttingen

Wenn Du Single Quotes (also einfache Hochkommata) verwendest, dann wird der Inhalt von Variablen nicht ersetzt. Dafür musst Du Double Quotes (also doppelte Hochkommata, sprich ") verwenden. Siehe Shell/Bash-Skripting-Guide für Anfänger (Abschnitt „Quoting“)

Fried-rich

(Themenstarter)

Anmeldungsdatum:
2. Mai 2013

Beiträge: 1162

Hab es über die zweite Variante gemacht und es geht so. Danke.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13216

user_unknown schrieb:

Fried-rich schrieb:

sed -i 's/abc[0-9]\{7\}/abc$var/g' file

Hier wird nicht der Inhalt der vorher gefüllten variablen eingesetzt sondern genau was dort steht. Auch mit \$ geht es nicht. Was ist hier falsch?

Die einfachen Apostrophe maskieren den Dollar. Mit Doppelten würde es gehen:

sed -i "s/abc[0-9]\{7\}/abc$var/g" file

Oder die Maskierung vor der Variablen aufheben:

sed -i 's/abc[0-9]\{7\}/abc'$var'/g' file

oder wohl auch

sed -i 's/abc[0-9]\{7\}/abc'$var/g file

Der sicherste Weg, der auch funktioniert, wenn die Variable Sonderzeichen oder Leerzeichen enthalten kann, ist nur die Variable doppelt zu quoten.

1
sed -i 's/abc[0-9]\{7\}/abc'"$var"'/g' file

Ganz wichtig: keine Leerzeichen zwischen diesem und den Single-Quote-Teilen! (Wobei man in diesem Fall die letzten beiden Single Quotes weglassen kann. Ich erwähne diese Variante wegen folgendes Unterschieds (Zeile 4 und 6):

1
2
3
4
5
6
$ echo \\
\
$ echo "\\"
\
$ echo '\\'
\\
Antworten |