Ich habe auf meinem Linux-Server Schadsoftware gefunden und versuche, sie aus vielen PHP-Dateien zu entfernen.
Ich habe es endlos mit grep | sed und grep | tr versucht und konnte nicht einmal eine einfache Textzeichenfolge löschen, sondern erhielt verschiedene Fehlermeldungen.
Beim Versuch:
grep -l '@error' * | xargs -0 sed -i 's/error/nothing/g'
Ich erhalte eine Fehlermeldung:
kann nicht lesenDateiname.php
Terminal auf dem Mac verwenden – vielleicht ist es ein OSX-Syntaxproblem?
Meine letzte Aufgabe besteht darin, eine lange Codezeichenfolge aus allen Dateien zu löschen. Sie enthält die Symbole $,!,?,<,>,\," – muss ich diese mit einem Backslash versehen?
Antwort1
Sie sollten aus einer Sicherung oder einer Quellcodeverwaltung wiederherstellen,@Matteempfohlen, da Sie sonst nicht 100 % sicher sein können, dass Sie alles bereinigt haben.
Das Problem mit Ihrem Befehl ist das -0
Flag für xargs
, da dieser Weg xargs
nullterminierte Argumente erwartet, was mit der Ausgabe von nicht funktioniert grep -l
. Lassen Sie einfach das weg -0
und es wird funktionieren, solange die Dateinamen keine Leerzeichen enthalten.
grep -l '@error' * | xargs sed -i 's/error/nothing/g'
Antwort2
grep -l @error * | xargs sed -i s/error/test/g
wird funktionieren.