从php文件中大量删除恶意行

时间:2014-10-09 18:07:55

标签: php shell unix sed

这里简要介绍了这个问题:Removing a string in a PHP file with Start and End但我正在寻找相同代码的解决方案。服务器上每个PHP文件的第一行都以 <?php if(!isset($GLOBALS[-1; ?>结尾。中间是一长串代码,因文件而异。

我正在尝试使用脚本从所有文件中删除此行。我和上一篇文章中的那个人碰壁了。

使用:

sed -e '1 s/^<\?php if(!isset($GLOBALS\[.*-1; \?>//' *.php

在UNIX环境中打印没有代码的PHP文件,但不保存它。我错过了什么?

3 个答案:

答案 0 :(得分:1)

使用sed的-i选项,以便sed修改PHP文件。

-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if extension supplied)

[SUFFIX]部分是可选的,但有些sed实现需要你提供它。

在你的情况下,你可以试试这个:

sed -i.bak 's/^<\?php if(!isset($GLOBALS\[.*-1; \?>//' *.php

阅读man sed了解详情。

答案 1 :(得分:1)

我写了一个脚本来清理所有目录和子目录中的所有文件。我建议你先备份。这是从shell内部完成的

首先在主目录中创建一个名为fixmacro的文件,并将以下两行添加到其中

:1/ua=strtolower/s/^.*<?php$/<?php/
:wq

接下来是受感染文件所在的目录,或者您可以从主目录运行它,运行以下命令。

find . -name *.php -exec vi -s ~/fixmacro {} \;

这将在每个php查找受感染的行并删除它们。如果这些文件没有受感染文件,则重新保存文件而不进行任何更改/

答案 2 :(得分:0)

让它工作,感谢您使用-i的建议。工作命令是:  sed -i.bak 's/^<\?php if(!isset($GLOBALS\[.*-1; \?>//' *.php