2012-09-05 19 views
5

Próbuję zastąpić dwa ciągi w pliku php za pomocą dwóch poleceń sed, nie mogę znaleźć, gdzie się mylę.sed: nie można rozwiązać tego wyrażenia regularnego

Chcesz przekształcić z ciągów

setlocale(LC_ALL, $_COOKIE['lang']); 

i

putenv("LANGUAGE=".$_COOKIE['lang']); 

do strun

setlocale(LC_ALL, $_COOKIE['lang'].'.utf8'); 

i

putenv("LANGUAGE=".$_COOKIE['lang'].'.utf8'); 

dotąd doszedłem do następujących, ale nie działa

sed -i "s/setlocale\(LC_ALL, \$_COOKIE\['lang'\]\);.*$/setlocale\(LC_ALL, \$_COOKIE\['lang'\]\.'\.utf-8'\)\;/" file.php 

sed -i "s/putenv\('LANGUAGE='\.\$_COOKIE\['lang'\]\);.*$/putenv\('LANGUAGE='\.\$_COOKIE\['lang'\]\.'\.utf-8'\)\;/" file.php 

Jestem zdecydowanie nie ekspertem w sed i wyrażenia regularnego, więc iść łatwo na mnie ok?

Odpowiedz

4

Wypróbuj te dwa:

sed 's/setlocale.LC_ALL, ._COOKIE..lang...;/setlocale\(LC_ALL, $_COOKIE\['\''lang'\''\].'\''.utf8'\''\);/g' file.php 
sed 's/putenv..LANGUAGE...._COOKIE..lang...;/putenv\("LANGUAGE=".$_COOKIE\['\''lang'\''].'\''.utf8'\'');/g' file.php 
+0

To też zadziałało, i dla każdego ciągu, dzięki. – TechNyquist

3

Nie powinieneś unikać nawiasów. Nie ma potrzeby, aby uciec pasujących znaków w części zamiennej, albo:

sed "s/setlocale(LC_ALL, \$_COOKIE\['lang'\]);.*$/setlocale(LC_ALL, \$_COOKIE['lang'].'.utf-8')\;/" 

Linia putenv zawiera cudzysłów, ale wyrażeń wyszukuje apostrofami. Dlatego nie może się równać.

+0

To działa, dzięki. – TechNyquist

Powiązane problemy