我需要搜索一个包含字符串的文件,并且只有在没有注释的情况下才用新行替换整行。实际情况是,只有在未注释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等错误或结果不符合预期。
提前致谢!
答案 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