删除包括他们自己在内的两个限制器之间的一行的字符

时间:2017-02-03 16:19:48

标签: sed delimiter

黑客攻击后,我需要清理一些代码,添加到太多文件的第一行。

<?php $somevar = 'some code....... ?><?php

我需要在<?php $somevar?>之间进行清理,因为最新的<?php可以与<html和其他sed -i.bak 's/\(<?php $drnrwsrl\).*\(?>\)/\1\2/' file.php 不同。

如果使用这个我需要两个陡峭的,因为不是干净的分隔符。我也需要删除分隔符。

<?php $drnrwsrl?><?php

结果

<?php

而不是我想要的

declare
     c_minute number;
      c_hour number;
begin
     select
          case when (17 - to_char(systimestamp,'HH24')) < 0 then 0 else 17 - to_char(systimestamp,'HH24') end hours into c_hour,
          case when (17 - to_char(systimestamp,'HH24')) < 0 then 0 else 60 - to_char(systimestamp,'MI') end into c_minute
        from dual;
end;

2 个答案:

答案 0 :(得分:2)

尝试

sed -i.bak -E 's/(<\?php.*\(?>)(<\?php)/\2/' file.php

答案 1 :(得分:1)

使用没有反向引用的BRE:

sed -i.bak 's/<?php \$somevar[^>]*><?php/<?php/' file.php

仅适用于第一行:

sed -i.bak '1s/<?php \$somevar[^>]*><?php/<?php/' file.php