【发布时间】:2011-09-16 11:29:58
【问题描述】:
我在这里和其他地方浏览过很多关于这个主题的帖子,但提供的解决方案似乎都不适合我。我需要在特定文件夹中的所有文件中用另一个字符串(包含正确的 PHP 代码)替换一个字符串(其中包含错误的无意义 PHP 代码)。我知道在使用 sed 时唯一需要转义的字符是与号、反斜杠以及用作分隔符的任何字符。
我要搜索的字符串是:
$arguments = func_get_args();$numargs = func_num_args();for($i=1; $i < $numargs; $i++){$arguments[$i] = $arguments = func_get_args();$arguments[$i];}
我要替换的字符串是:
$arguments = func_get_args();$numargs = func_num_args();for($i=1; $i < $numargs; $i++){$arguments[$i] = &$arguments[$i];}
我尝试了许多变体,但无法让它发挥作用。我认为以下命令应该工作(但没有)。
find /folder/to/search -name Function.php -type f -exec sed -i 's|$arguments = func_get_args();$numargs = func_num_args();for($i=1; $i < $numargs; $i++){$arguments[$i] = $arguments = func_get_args();$arguments[$i];}|$arguments = func_get_args();$numargs = func_num_args();for($i=1; $i < $numargs; $i++){$arguments[$i] = \&$arguments[$i];}|' {} \;
这让我发疯 - 任何帮助将不胜感激!
【问题讨论】:
-
只替换 for 循环中的内容是否就足够了(这似乎是两者之间的唯一区别)?
-
是的,我可能应该简化一下。在进行搜索和替换时,我通常会尝试包含整行以避免误报,但在这种情况下,内部部分足够具体就足够了。
标签: regex sed escaping replace