如果存在匹配的字符串且没有注释,则Sed命令替换为一行

时间:2013-06-20 07:42:04

标签: php sed

我需要搜索一个包含字符串的文件,并且只有在没有注释的情况下才用新行替换整行。实际情况是,只有在未注释include语句时,我才需要用新文件替换文件的包含。 实施例

include("../mytest.php");
// include("../mytest.php");

预期结果

require_once("mytestnew.php");
// include("../mytest.php");

我已尝试在网络上的不同位置找到以下某些sed命令:

sed -i '/^[\t]*\/\/.*/!/include.*mytest.php/c\require_once("mytestnew.php");' file.php
sed -i '/^[\t]*\/\/.*/!{include.*mytest.php/c\require_once("mytestnew.php");}' file.php
sed -i '/^[\t]*\/\/.*/b;include.*mytest.php/c\require_once("mytestnew.php");' file.php
sed -i '/^[\t]*\/\/.*/!s/include.*mytest.php/c\require_once("mytestnew.php");/g' file.php

在大多数其他情况下,我也会遇到意外情况{或s等错误或结果不符合预期。

提前致谢!

3 个答案:

答案 0 :(得分:2)

尝试

sed 's#^[ \t]*include("../mytest.php");#require_once("../mytestnew.php");#' inputfile

如果要保留未注释的include行中的前导空格,请尝试:

sed 's#^\([ \t]*\)include("../mytest.php");#\1require_once("../mytestnew.php");#' inputfile

答案 1 :(得分:0)

您是否尝试过:

sed 's|^include("../mytest.php");|require_once("mytestnew.php");|g' file.php

答案 2 :(得分:0)

我在使用转义字符后得到了正确的结果:

sed -i 's#^[\t]*include.*mytest.php");#require_once("\.\.\/mytestnew.php");#' file.php