Ich habe einige Websites, die angegriffen und mit Malware infiziert wurden.Linux finde Dateien mit String und ersetzen
Es gibt mehr als 800 Dateien, die aktualisiert werden müssen, und die Zeichenfolge ist in jeder Datei genau gleich.
Ich möchte alle Dateien finden, die die Malware enthalten, und dann die fehlerhafte Zeichenfolge aus der Datei löschen.
Ich habe einige Kommandozeilen-Skripte gefunden, die gut funktionieren, wenn sie auf einem Grund Zeichenfolge getestet:
perl -pi -w -e 's/string_to_find//g;' test-file.php
und wenn sie in den find-Befehl kombiniert:
Fund. -type f | xargs grep 'string_to_find' -sl | xargs perl -pi -w -e's/string_to_find // g; '
Jetzt ist mein Problem, dass immer auf die Saite zu arbeiten, die eine extrem lange und komplexe Zeichenfolge ist:
<?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;} ?>
Nun, wenn ich die Suche und ersetzen mit dem vollständigen Zeichenfolge versuchen (Flucht in den besonderen Zeichen) ich dieses Ergebnis:
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.
ist es möglich, zu tun, was ich versuche, die Zeichenfolge unmöglich zu erfassen zu tun oder ist? Muss ich das @ -Symbol anders entgehen? (Ich entkam mit einem \ und das hat nicht funktioniert)
Jede Hilfe - Ich bin ein Anfänger mit bash und perl
FAQ http://learn.perl.org/faq/perlfaq6.html#How-can-I-quote-a-variable-in-use-in-a-regex- – daxim
danke Daxim - ich nicht will lernen perl –