У меня есть сайты, на которых были атакованы и заражены вредоносными программами.Linux найти файлы со строкой и заменить
Есть 800+ файлов, которые необходимо обновить, и строка будет точно такой же в каждом файле.
Что я хочу сделать, это найти все файлы, в которых есть вредоносное ПО, а затем удалить строку-нарушитель из файла.
Я нашел несколько сценариев командной строки, которые работают нормально при испытании на основной строке:
perl -pi -w -e 's/string_to_find//g;' test-file.php
и при объединении в команду найти:
находке. -тип f | xargs grep 'string_to_find' -sl | xargs perl -pi -w -e 's/string_to_find // g;'
Теперь моя проблема заключается в получении, что для работы на строке, которая является чрезвычайно длинной и и сложной строкой:
<?php @error_reporting(0); if (!isset($eva1fYlbakBcVSir)) {$eva1fYlbakBcVSir = "random_string_7365_characters_long";$eva1tYlbakBcVSir = "string_of_encoded_characters";$eva1tYldakBcVSir = "string_of_encoded_characters";$eva1tYldakBoVS1r = "string_of_encoded_characters";$eva1tYidokBoVSjr = "string_of_encoded_characters";$eva1tYldokBcVSjr=$eva1tYldakBcVSir($eva1tYldakBoVS1r);$eva1tYldakBcVSjr=$eva1tYldakBcVSir($eva1tYlbakBcVSir);$eva1tYidakBcVSjr = $eva1tYldakBcVSjr(chr(2687.5*0.016), $eva1fYlbakBcVSir);$eva1tYXdakAcVSjr = $eva1tYidakBcVSjr[0.031*0.061];$eva1tYidokBcVSjr = $eva1tYldakBcVSjr(chr(3625*0.016), $eva1tYidokBoVSjr);$eva1tYldokBcVSjr($eva1tYidokBcVSjr[0.016*(7812.5*0.016)],$eva1tYidokBcVSjr[62.5*0.016],$eva1tYldakBcVSir($eva1tYidokBcVSjr[0.061*0.031]));$eva1tYldakBcVSir = "";$eva1tYldakBoVS1r = $eva1tYlbakBcVSir.$eva1tYlbakBcVSir;$eva1tYidokBoVSjr = $eva1tYlbakBcVSir;$eva1tYldakBcVSir = "string_of_encoded_characters";$eva1tYlbakBcVSir = "string_of_encoded_characters";$eva1tYldakBoVS1r = "string_of_encoded_characters";$eva1tYldakBcVSir = "";$eva1tYldakBoVS1r = $eva1tYlbakBcVSir.$eva1tYlbakBcVSir;$eva1tYidokBoVSjr = $eva1tYlbakBcVSir;} ?>
Теперь, когда я пытаюсь поиск и замены с полной строкой (спасаясь всеми специальными символов) я получаю этот результат:
Possible unintended interpolation of @error_reporting in string at -e line 1.
Name "main::error_reporting" used only once: possible typo at -e line 1.
можно ли делать то, что я пытаюсь сделать, или это строка невозможно захватить? Нужно ли мне избегать символа @ по-другому? (Я бежал с \ и что не работает)
Любая помощь - я новичок с Баш и Perl
Вопросы и ответы http://learn.perl.org/faq/perlfaq6.html#How-can-I-quote-a-variable-to-use-in-a-regex- – daxim
спасибо daxim - не знаю хочу узнать perl –