Linux sed команда замены строки не работает

Мой WordPress сайт был заражен Eval (gzinflate (base64_decode (» хак.

Я хотел бы ssh на сервер и найти заменить все эти строки в моих файлах php ни с чем.

Я попробовал следующую команду:

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

Я думаю, что это не работает, потому что строка имеет / персонажи внутри него, который я считаю нужным избежать.

Может кто-нибудь, пожалуйста, дайте мне знать, как избежать этих персонажей?

Заранее спасибо.

0

Решение

Я не пробовал так BACKUP ВАШИ ФАЙЛЫ ПЕРВЫЙ! Как уже упоминалось в некоторых комментариях, это не лучшая идея, возможно, лучше попробовать другие подходы. Во всяком случае, что по этому поводу?

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

Другие решения

если у вас есть Perl:

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

=> все измененные файлы будут иметь резервную копию (суффикс ‘.bck’)

0

Баш предлагает различные разделители, такие как @% | ; : / в команде подстановки 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'
0
По вопросам рекламы [email protected]