Sc0undRel
@Sc0undRel

Как массово заменить строки в файлах через SSH?

Файлы на сервере заразились вирусом.
Необходимо найти все файлы со следующим вхождением и удалить это вхождение:

<FilesMatch ".(PhP|php5|suspected|phtml|py|exe|php|asp|Php|aspx)$">
 Order allow,deny
 Deny from all
</FilesMatch>
<FilesMatch "^(postfs.php|votes.php|index.php|wjsindex.php|lock666.php|font-editor.php|ms-functions.php|contents.php|jsdindex.php|wp-login.php|load.php|template-load.php)$">
 Order allow,deny
 Allow from all
</FilesMatch>
AddType application/x-httpd-cgi .sh


Пробую это сделать при помощи команды
find . -type f | xargs -d "\n" perl -pi -e 's/search/replace/g'


Вместо search надо прописать регулярку для искомого текста. У меня это не получается...
Помогите, пожалуйста!

Вроде вот такой код должен подходить, но не работает
find . -type f | xargs -d "\n" perl -pi -e 's/<FilesMatch.*\n\s*.*\n\s*.*\n<\/FilesMatch>/replace/g'
  • Вопрос задан
  • 160 просмотров
Пригласить эксперта
Ответы на вопрос 2
gbg
@gbg
Любые ответы на любые вопросы
Лучше всего вместо костылинга накатить бекап
Ответ написан
Комментировать
leonidas
@leonidas
1. я могу ошибаться, но мне кажется, вы читаете построчно. вычитайте целиком, добавив $/=undef
2. слишком усложняете, добавьте /sm чтоб точка включала перенос строк
3. возможно нужно брать минимальный блок,

Вам примерно нужно, что-то вроде
$/ = undef; s{ <FilesMatch .*? /FilesMatch> }{replace}gxsm
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы