2015-02-12 91 views
-1

我试图查找/替换在遍布目录树的许多文件中找到的字符串。查找/替换为sed会产生意想不到的结果

我以为我会用sed来完成这个任务。

find /some/dir -name \*.php -exec sed -i "s/cybernetnews/cybernet/g" {} \; 

这个工作过程与样本串预期“cybernetnews”,但事情变得奇怪,当我尝试查找/替换针对此字符串:

preg_match($_SESSION['infos']['num'], $numeric_variable) 

哪里要替换字符串$_SESSION['infos']['num']常数INFOS_NUM

所以,我想这会工作:

find /some/dir -name \*.php -exec sed -i "s/$_SESSION['infos']['num']/INFOS_NUM/g" {} \; 

没有运气,这里是显示在测试PHP文件运行上面的命令后:

preg_match($_SESSION['INFOS_NUMfoINFOS_NUM][INFOS_NUMum'], 
      $INFOS_NUMmeric_variable) 

我试图逃避单引号,但得到完全相同的结果。如果我逃过支架,则不做任何更改。

什么字符是sed挂掉了,我该如何正确地逃脱它?

+0

可能重复的[桑达 - 具有可变充满怪异字符替换的字符串](http://stackoverflow.com/questions/21535046/sed-replacing-a-string-with-a-variable-全怪的字符) – NeronLeVelu 2015-02-12 06:47:09

+0

请解释downvote。 – 2015-02-12 18:41:38

+0

对不起,不是我的 – NeronLeVelu 2015-02-13 06:59:50

回答

2

$, [, ]是正则表达式中的特殊字符,您必须在正则表达式中转义该字符才能逐字匹配这些字符。要进行不区分大小写的匹配,最后需要添加i修饰符。

find /some/dir -name \*.php -exec sed -i "s/\$_SESSION\['infos'\]\['num'\]/INFOS_NUM/g" {} \; 
+1

为了补充说明,'$'也是一个特殊字符。它在代码段中正确转义,但没有提及。 – Agop 2015-02-12 00:45:16

相关问题