2012-09-05 16 views
5

Sto cercando di sostituire due stringhe in un file php utilizzando due comandi sed, non riesco a trovare dove ho sbagliato.sed: impossibile risolvere questa espressione regolare

desidera trasformare da stringhe

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

e

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

alle corde

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

e

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

finora sono venuto per il seguente, ma non funziona

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 

Sono decisamente non un esperto di espressione sed e regolari, in modo da andare facile su di me ok?

risposta

4

provare questi due:

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

Anche questo ha funzionato, e per ogni stringa, grazie. – TechNyquist

3

Non si dovrebbe sfuggire alle parentesi. Non c'è bisogno di sfuggire caratteri corrispondenti nella parte di ricambio, sia:

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

La linea putenv contiene le virgolette, ma le espressioni ricerche per singoli apici. Pertanto, non può corrispondere.

+0

che ha funzionato, grazie. – TechNyquist

Problemi correlati