2012-09-05 87 views
5

我試圖用兩個sed命令替換php文件中的兩個字符串,找不到我錯在哪裏。sed:無法解決這個正則表達式

想從字符串

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

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

的字符串變換

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

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

到目前爲止,我得出以下但不工作

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 

我絕對不 sed和正則表達式的專家,這樣下去容易對我好嗎?

回答

4

嘗試這兩個:

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

這也工作,併爲每個字符串,謝謝。 – TechNyquist

3

你不應該逃避括號。沒有必要在更換部件逃脫匹配字符,或者:

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

putenv行包含雙引號,但對單引號你的表情搜索。因此,它不能匹配。

+0

這工作,謝謝。 – TechNyquist