grep と sed を使用して PHP ファイルから長い文字列を削除しますか?

grep と sed を使用して PHP ファイルから長い文字列を削除しますか?

Linux サーバー上でマルウェアに遭遇したので、多くの PHP ファイルからそれを削除しようとしています。

grep | sed と grep | tr を何度も試しましたが、単純なテキスト文字列を消去することすらできず、さまざまなエラーが発生しました。

試すとき:

grep -l '@error' * | xargs -0 sed -i 's/error/nothing/g'   

次のエラーメッセージが表示されます:

読めないファイル名.php

Mac でターミナルを使用する - OSX 構文の問題でしょうか?

最後のタスクは、すべてのファイルから長いコード文字列を削除することです。その中には、$、!、?、<、>、\、" などの記号が含まれていますが、バックスラッシュを付ける必要はありますか?

答え1

バックアップまたはソース管理から復元する必要があります。@マットそうしないと、すべてをクリーンアップしたことを 100% 確信できないため、これを推奨します。

コマンドの問題は-0のフラグですxargs。この方法でxargsはヌルで終了する引数が想定されるため、 の出力では機能しませんgrep -l。 を削除する-0だけで、ファイル名に空白が含まれていない限り機能します。

grep -l '@error' * | xargs sed -i 's/error/nothing/g'

答え2

grep -l @error * | xargs sed -i s/error/test/g

働くでしょう。

関連情報