【问题标题】:Linux sed command replace string not workingLinux sed命令替换字符串不起作用
【发布时间】:2015-03-24 02:20:59
【问题描述】:

我的 wordpress 网站已经感染了 eval(gzinflate(base64_decode(' hack.

我想通过 ssh 进入服务器并找到将我的 php 文件中的所有这些行替换为空。

我尝试了以下命令:

find . -name "*.php" -print | xargs sed -i 'MY STRING HERE'

我认为这不起作用,因为字符串中有 / characters 我认为需要转义。

有人可以告诉我如何转义这些字符吗?

提前致谢。

【问题讨论】:

  • 怎么样:find . -name "*.php" -exec sed -i 's/ugly/beautiful/g' {} ;
  • 不要使用sed。不要试图这样恢复。从干净的备份中恢复。这种恢复从来都不是一个好主意。如果你必须做这样的事情,那么是的,你需要转义脚本中的字符(使用`) or use a different sed`命令字符串s,,,s!!!等(你几乎可以使用任何东西)。

标签: php linux wordpress bash sed


【解决方案1】:

我还没试过所以先备份你的文件!正如一些 cmets 中提到的,这不是最好的主意,尝试其他一些方法可能会更好。无论如何,这个呢?

find . -name "*.php" -type f -exec sed -i '/eval(gzinflate(base64_decode(/d' {} \;

【讨论】:

    【解决方案2】:

    如果你有 perl 可用:

     perl -p -i'.bck' -e 's/oldstring/newstring/g' `find ./ -name *.php`
    

    =>所有修改的文件都会有备份(后缀“.bck”)

    【讨论】:

      【解决方案3】:

      Bash 提供不同的分隔符,例如@ % | ; : / 在 sed 替换命令中

      因此,当替换涉及提到的分隔符之一时,任何其他分隔符都可以在 sed 命令中使用,因此无需转义所涉及的分隔符。

      例子:

      当替换/替换涉及“/”时,可以使用如下:

      sed 's@/will/this/work@/this/is/working@g' file.txt
      

      关于您的问题,您的替换/替换涉及“/”,因此您可以使用任何其他分隔符。

      find . -name "*.php" -print | xargs sed -i 's@/STRING/TO/BE/REPLACED@/REPLACEMENT/STRING@g'
      

      【讨论】:

        猜你喜欢
        • 2019-09-28
        • 1970-01-01
        • 1970-01-01
        • 2021-05-16
        • 1970-01-01
        • 2016-10-30
        • 2014-04-07
        • 2016-11-12
        • 1970-01-01
        相关资源
        最近更新 更多