2010-06-10 32 views
8

Wierzę, że to może być proste pytanie, ale szukałem wszędzie i próbowałem obejść, ale nadal nie rozwiązałem problemu.Sed nie działa wewnątrz skryptu bash

Problem Opis: muszę zastąpić znak wewnątrz pliku i mogę zrobić to łatwo za pomocą wiersza poleceń:

sed -e 's/pattern1/pattern2/g' full_path_to_file/file 

Ale kiedy korzystać z tej samej linii wewnątrz skryptu bash nie mogę wydaje się być w stanie go zastąpić i nie dostaję komunikatu o błędzie, tylko zawartość pliku bez podstawienia.

#!/bin/sh 

VAR1="patter1" 
VAR2="patter2" 

VAR3="full_path_to_file" 

sed -e 's/${VAR1}/${VAR2}/g' ${VAR3} 

Każda pomoc zostanie doceniona.

Dziękuję bardzo za poświęcony czas.

+0

sed -e nie zmienia pliku, po prostu pokaż plik z podtekstem, ale plik się nie zmienia, w każdym przypadku – chmeee

Odpowiedz

17

Spróbuj

sed -e "s/${VAR1}/${VAR2}/g" ${VAR3} 

Bash reference mówi:

znaki '$' i '`' zachowuje swoje szczególne znaczenie wewnątrz cudzysłowów

ten sposób będzie w stanie rozwiązać zmienne

0

Używam skryptu li ke yours ... a moje działa również!

#!/bin/sh 

var1='pattern1' 
var2='pattern2' 

sed -i "s&$var1&$var2&g" *.html 

Zobacz, że kopalnia użyć „-i” ... i charakter Separator „&” Używam różni się same. Znak separatora "&" może być użyty jako dowolny inny znak NIE MAJĄCY WZORCA.

Można użyć:

sed -i "s#$var1#$var2#g" *.html 

sed -i "[email protected][email protected][email protected]" *.html 

...

Jeśli mój wzór jest: "[email protected]" oczywiście należy użyć separator inny jak "#", "%" ... ok?