我正在尝试查找/替换遍布目录树的多个文件中找到的字符串。
我以为我会用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 :(得分:2)
$
,[
,]
是正则表达式的特殊字符,您必须在正则表达式中按顺序转义它才能按字面顺序匹配这些字符。要进行不区分大小写的匹配,您需要在最后添加i
修饰符。
find /some/dir -name \*.php -exec sed -i "s/\$_SESSION\['infos'\]\['num'\]/INFOS_NUM/g" {} \;