variable in sed

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
OldGod78
Beiträge: 190
Registriert: 20.04.2016 20:59:51
Kontaktdaten:

variable in sed

Beitrag von OldGod78 » 15.01.2017 17:26:29

Code: Alles auswählen

sed -i 's/9987/$port/g' text.txt
wieso ändert er es zu "$port" und nutzt nicht die variable ? was muss ich ändern ?

inne
Beiträge: 3281
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: variable in sed

Beitrag von inne » 15.01.2017 17:30:30

IMO wegen der Quotes. Vgl.

$ echo '$USER'
$USER
$ echo "$USER"
inne

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: variable in sed

Beitrag von Meillo » 15.01.2017 17:55:53

inne hat geschrieben:IMO wegen der Quotes.
Genau.


Sed-Scripte packt man meist in Single-Quotes, aber wenn du darin Shell-Variablen expandieren willst, dann musst du entweder das ganze Script in Double-Quotes packen (und die sonstigen Dollarzeichen und so escapen -- gibt's in deinem Fall ja keine), oder du musst ein bisschen kreativer Quoten, z.B. so:

Code: Alles auswählen

sed 's/foo/'"$bar"'/'

Wenn wir schon dabei sind, hier die Loesung auf die Frage, wie man einen Single-Quote literal in einen Single-Quote-String einbettet:

Code: Alles auswählen

echo 'foo'"'"'bar'
Wenn man das mal verstanden hat, dann wird man mit dem Quoting in der Shell keine Probleme mehr haben.
Use ed once in a while!

ren22

Re: variable in sed

Beitrag von ren22 » 17.01.2017 19:57:32

Code: Alles auswählen

i=hallo
sed 's/'$i'//')

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: variable in sed

Beitrag von Meillo » 17.01.2017 21:06:54

ren22 hat geschrieben:

Code: Alles auswählen

i=hallo
sed 's/'$i'//')
Dann mach mal:

Code: Alles auswählen

i="a b"
:-P

Merke: Variablenexpansionen in fast allen Faellen double-quoten! ... auch wenn das hier seltsam aussehen mag vor lauten Quotes, aber daran muss man sich halt gewoehnen, wenn man Shellprogrammieren will.
Use ed once in a while!

breakthewall
Beiträge: 507
Registriert: 30.12.2016 23:48:51

Re: variable in sed

Beitrag von breakthewall » 18.01.2017 19:30:08

OldGod78 hat geschrieben:

Code: Alles auswählen

sed -i 's/9987/$port/g' text.txt
Ich würde dir zusätzlich noch anraten, bei sed nicht sofort den Schalter "-i" zu nutzen. Vor allem nicht wenn man sich seiner Sache nicht völlig sicher ist. Lieber ohne testen, dann wird alles zunächst nur auf der Shell ausgegeben. Wenn hier alles passt, kann man die Dateien immer noch editieren.

ren22

Re: variable in sed

Beitrag von ren22 » 19.01.2017 19:54:31

Meillo hat geschrieben:
ren22 hat geschrieben:

Code: Alles auswählen

i=hallo
sed 's/'$i'//')
Dann mach mal:

Code: Alles auswählen

i="a b"
:-P

Merke: Variablenexpansionen in fast allen Faellen double-quoten! ... auch wenn das hier seltsam aussehen mag vor lauten Quotes, aber daran muss man sich halt gewoehnen, wenn man Shellprogrammieren will.
Oops.. Ja stimmt, danke für den Hinweis :THX:

Antworten