Здесь кратко рассмотрено: Удаление строки в файле PHP с помощью Start и End, но я ищу решение для того же кода. Первая строка каждого файла PHP на сервере начинается с <?php if(!isset($GLOBALS[
и заканчивается на -1; ?>
в середине – длинная строка кода, которая варьируется от файла к файлу.
Я пытаюсь придумать скрипт, чтобы удалить эту строку из всех файлов. Я бегу в ту же стену, что и парень в предыдущем посте.
С помощью:
sed -e '1 s/^<\?php if(!isset($GLOBALS\[.*-1; \?>//' *.php
в среде UNIX печатает файл PHP без кода, но не сохраняет его. Что мне не хватает?
Я написал сценарий для очистки всех файлов во всех каталогах и подкаталогах. Я рекомендую вам резервное копирование 1-го. Это делается изнутри оболочки
Сначала создайте файл с именем fixmacro
в своем домашнем каталоге и добавьте к нему следующие 2 строки
:1/ua=strtolower/s/^.*<?php$/<?php/ :wq
Далее из каталога, где находятся зараженные файлы, или вы можете запустить его из своего домашнего каталога, выполните следующую команду.
find . -name *.php -exec vi -s ~/fixmacro {} \;
Это пойдет на каждый поиск php для зараженных линий и удалит их. Если это не зараженные файлы, он сохраняет файл без изменений /
Используйте параметр sed -i
, чтобы sed модифицировал файлы PHP.
-i[SUFFIX], --in-place[=SUFFIX] edit files in place (makes backup if extension supplied)
Часть [SUFFIX] является необязательной, но некоторые реализации sed требуют, чтобы вы ее предоставили.
В вашем случае вы можете попробовать следующее:
sed -i.bak 's/^<\?php if(!isset($GLOBALS\[.*-1; \?>//' *.php
Читайте man sed
для получения дополнительной информации.
Получил это, спасибо за совет по использованию -i. Рабочая команда: sed -i.bak 's/^<\?php if(!isset($GLOBALS\[.*-1; \?>//' *.php