Encontrei algum malware em meu servidor Linux e estou tentando removê-lo de muitos arquivos php.
Eu tentei infinitamente com grep | sed e grep | tr e não conseguia nem apagar uma simples sequência de texto, obtendo erros diversos.
Ao tentar:
grep -l '@error' * | xargs -0 sed -i 's/error/nothing/g'
Recebo uma mensagem de erro:
não consigo lernome do arquivo.php
Usando o Terminal no Mac - talvez seja um problema de sintaxe do OSX?
Minha tarefa final é excluir uma longa sequência de código de todos os arquivos - uma que inclua alguns símbolos $,!,?,<,>,\," - precisarei colocá-los com barra invertida?
Responder1
Você deve restaurar do backup ou do controle de origem como@Esteirasugerido porque, caso contrário, você não poderá ter 100% de certeza de que limpou tudo.
O problema com o seu comando é o -0
sinalizador for xargs
, porque dessa forma xargs
espera argumentos terminados em nulo, o que não funciona com a saída de grep -l
. Basta soltar -0
e funcionará, desde que os nomes dos arquivos não contenham espaços em branco.
grep -l '@error' * | xargs sed -i 's/error/nothing/g'
Responder2
grep -l @error * | xargs sed -i s/error/test/g
vai funcionar.