这里简要介绍了这个问题: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文件,但不保存它。我错过了什么?
答案 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