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?
Anmeldungsdatum: 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? |
||||
![]() Anmeldungsdatum: Beiträge: 17623 Wohnort: Berlin |
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 |
||||
![]() Anmeldungsdatum: 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“) |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 1162 |
Hab es über die zweite Variante gemacht und es geht so. Danke. |
||||
Projektleitung
Anmeldungsdatum: Beiträge: 13216 |
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.
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):
|