【问题标题】:sed: cannot solve this regular expressionsed:无法解决这个正则表达式
【发布时间】:2012-09-05 08:49:59
【问题描述】:

我正在尝试使用两个 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 和正则表达式方面的专家,所以放轻松好吗?

【问题讨论】:

    标签: regex linux sed


    【解决方案1】:

    试试这两个:

    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
    

    【讨论】:

      【解决方案2】:

      您不应该转义括号。替换部分中的匹配字符也无需转义:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-21
        • 1970-01-01
        • 2012-09-13
        • 1970-01-01
        • 2018-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多