Здравствуйте.
Проблема следующая. Мой хостинг взломали и в куче файлов добавили какой-то дурацкий код с iframe. После некоторых экспериментов с коммандами grep и sed, мне удалось вычистить этот вредоносный код.
Проблема в том, что во многих файлах код был вставлен внутрь закрывающего тега
, поэтому сечас в этих файлах тег разорван, т.е мы имеем что-то типа:
</</p>
body>
или
dy>
или еще несколько похожих комбинаций.
Я, к сожалению, очень мало понимаю в UNIX, поэтому никак не могу составить выражение, которое бы находило все нужные случаи.
«</[^>][:space:]$]+[^>]>» или «</[body]{0,4}[:space:]$]+[body]{0,4}>» это то что мне кажется должно соответствовать моему фрагменту, но не работает, значит я идиот. Помогите, пожалуйста, я как-то туплю и ничего не могу придумать.
Заранее большое всем спасибо
Последние комментарии
-
OlegL, 17 декабря 2023 года в 15:00 →
Перекличка
21
-
REDkiy, 8 июня 2023 года в 9:09 →
Как «замокать» файл для юниттеста в Python?
2
-
fhunter, 29 ноября 2022 года в 2:09 →
Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt?
6
-
Иванн, 9 апреля 2022 года в 8:31 →
Ассоциация РАСПО провела первое учредительное собрание
1
-
Kiri11.ADV1, 7 марта 2021 года в 12:01 →
Логи catalina.out в TomCat 9 в формате JSON
1
DevOps as a Service from Palark

У sed/grep и т.п. есть некоторые хитрости при работе с многострочностью. Поскольку я люблю perl и у меня хорошее настроение…
shurup@ubuntop:~$ cat a.txt </ body> или </bo dy> shurup@ubuntop:~$ cat a.pl #!/usr/bin/perl -W use strict; my ($file, $content); my @files = @ARGV; while ($#files >= 0) { $file = shift(@files); print "Working with $file... "; if (open(R, $file)) { $content = ''; $content .= $_ while(); close(R); } if ($content) { $content =~ s/<\s*(\/)\s*(b)\s*(o)\s*(d)\s*(y)\s*>/<$1$2$3$4$5>/g; if (open(W, '>'.$file)) { print W $content; close(W); print "Something has been replaced! "; } } print "ok.\n"; } shurup@ubuntop:~$ perl a.pl a.txt Working with a.txt... Something has been replaced! ok. shurup@ubuntop:~$Надеюсь, суть понятна :-) (Скрипту можно через пробел передавать сразу кучку файлов: «perl a.pl a.txt b.txt dir/c.txt». Если в них нет проблемных
, изменяться файлы не будут и во время работы скрипта для них не выведется сообщение «Something has been replaced!».)
Перед запуском на всякий случай настоятельно рекомендую сделать backup. Мало ли чего…
P.S. Про хитрости многострочной работы sed — см. http://docstore.mik.ua/orelly/unix/sedawk/ch06_01.htm
Огромное спасибо за помощь!