sed:无法解决这个正则表达式

时间:2012-09-05 08:49:59

标签: regex linux sed

我正在尝试使用两个 sed 命令替换php文件中的两个字符串,找不到我错的地方。

想要从字符串转换

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和正则表达的专家,所以请放轻松我好吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

你不应该逃避括号。无需在替换部件中转义匹配的字符:

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

putenv行包含双引号,但您的表达式会搜索单引号。因此,它无法匹敌。