2012-09-05 16 views
5

Estoy tratando de reemplazar dos cadenas en un archivo php usando dos sed comandos, no puedo encontrar dónde estoy equivocado.sed: no se puede resolver esta expresión regular

desea transformar a partir de cadenas

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

y

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

a las cuerdas

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

y

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

por lo lejos que he llegado a la siguiente, pero no funciona

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 

estoy definitivamente no un experto en la expresión de sed y regular, por lo que ir fácil en mí ok?

Respuesta

4

Prueba estas dos:

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

Esto funcionó también, y para cada cadena, gracias. – TechNyquist

3

No debe escapar entre paréntesis. No hay necesidad de escapar caracteres coincidentes en la pieza de repuesto, ya sea:

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

La línea putenv contiene comillas dobles, pero sus expresiones búsquedas de comillas simples. Por lo tanto, no puede coincidir.

+0

que funcionaba, gracias. – TechNyquist

Cuestiones relacionadas