sed, använda variabler

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
rylleman
Inlägg: 477
Blev medlem: 23 apr 2007, 16:37
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Ort: bagarmossen

sed, använda variabler

Inlägg 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!?
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: sed, använda variabler

Inlägg 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'`
rylleman
Inlägg: 477
Blev medlem: 23 apr 2007, 16:37
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Ort: bagarmossen

Re: sed, använda variabler

Inlägg av rylleman »

Tack!
Det fungerar utmärkt!
Skriv svar

Återgå till "Terminalforum"