Sida 1 av 1

sed, använda variabler

Postat: 15 feb 2011, 13:29
av rylleman
Jag försöker få ett skript med sed att funka men ingenting jag provar fungerar.

Kod: Markera allt

winepath=`echo "$mypath" |  sed 's/\/media\/WORK/S:/'`
...
sed 's/image\ \"/image\ \$winepath\//' $ASfile >rendertemp.anme
...
jag försöker alltså ändra paths i en textfil att passa ett wine-program.
image "01_images/BG_liten.png"
skall bli:
image "S:/mappen-vi-står-i/01_images/BG_liten.png"

Jag lyckas byta "image "" mot vadsomhelst annat utom just $winepath.
Har provat alla möjliga citationstecken på alla möjliga ställen men det resulterar bara i antingen en tom textfil eller varianter på temat
image "$winepath"/01_images/bilden.png

hur får jag det att fungera!?

Re: sed, använda variabler

Postat: 15 feb 2011, 15:23
av Konservburk
När du stoppar in en skalvariabel i ett sed-uttryck på det där sättet så måste du alltid se upp med att skalvariabeln kan innehålla tecken som sed tolkar som något annat än just de tecknen. Exakt vilka tecken det handlar om är lite olika beroende på vilket sed-uttryck det gäller och var i uttrycket variabel-ersättningen ska ske.

Om vi tar exemplet sed 's/sök/ersätt/' så måste du till att börja med byta ut ' mot " när du stoppar in en skalvariabel. Men sed "s/sök/$variabel/" kommer bara att fungera om $variabel inte innehåller något av tecknen & eller / eller \ eftersom dessa tecken tolkas som en del av sed-uttrycket.

En lösning på problemet är att skydda dessa tecken från sed-uttrycket genom att sätta ett \ framför varje sådant tecken. Det kan du t.ex. göra så här:

Kod: Markera allt

variabel=`echo "$variabel" | sed 's/[&/\]/\\\\&/g'`

Re: sed, använda variabler

Postat: 15 feb 2011, 16:08
av rylleman
Tack!
Det fungerar utmärkt!