5

2 つのsedコマンドを使用して php ファイル内の 2 つの文字列を置き換えようとしていますが、どこが間違っているのかわかりません。

文字列から変換したい

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

2 に答える 2

4

次の 2 つを試してください。

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
于 2012-09-05T09:06:25.920 に答える
3

括弧をエスケープしないでください。置換部分で一致する文字をエスケープする必要はありません。

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

行には二重引用符が含まれputenvていますが、式は単一引用符を検索します。したがって、一致することはできません。

于 2012-09-05T08:56:33.610 に答える