Linux sed命令替换字符串不起作用

时间:2015-01-25 13:48:33

标签: php linux wordpress bash sed

我的wordpress网站感染了 eval(gzinflate(base64_decode(' hack。

我想ssh进入服务器并找不到我的php文件中的所有这些行。

我尝试了以下命令:

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

我认为这不起作用,因为字符串中包含 / 字符,我认为需要将其转义。

有人可以告诉我如何逃避这些角色吗?

提前致谢。

3 个答案:

答案 0 :(得分:0)

我没有尝试过这样备份你的文件!正如一些评论中提到的,这不是最好的想法,尝试其他方法可能会更好。无论如何,这个怎么样?

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

答案 1 :(得分:0)

如果你有perl可用:

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

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

答案 2 :(得分:0)

Bash提供不同的分隔符,例如@%| ; :/ in sed substitute命令

因此,当替换涉及其中一个分隔符时,可以在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'