Это было кратко рассмотрено здесь: Удаление строки в файле 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