ошибка замены sed: sed: -e выражение # 1, char 51: неизвестный параметр `s '

Возможный дубликат:
   заменить URL-адрес с помощью сценария оболочки

Я пытаюсь заменить строку в файле конфигурации php.ini: php.ini с sed. Есть два варианта, которые мне нужно изменить с помощью sed внутри другого скрипта. Вот команда sed, которую я использовал:

sed -i s/^session.save_handler.*/session.save_handler = memcache/ /etc/php5/fpm/php.ini
sed -i s/\;session.save_path.*/session.save_path = unix:/tmp/memcached.sock/ /etc/php5/fpm/php.ini

Первая команда выполняется успешно, а вторая - нет. Вместо этого он возвращает ошибку:

sed: -e expression #1, char 51: unknown option to `s'

Любая помощь будет принята с благодарностью

0
nl ja de
@FabSa, = , вероятно, тоже плохой выбор, так как он хочет того же и в его замене.
добавлено автор Carl Norum, источник
Вам нужно избежать символа / с \ или использовать другой специальный символ для разделения вашего регулярного выражения (например =).
добавлено автор Fabien Sa, источник
Конечно, это был пример;)
добавлено автор Fabien Sa, источник

2 ответы

Вам нужно избежать символов / на стороне замены вашего второго примера:

sed -i s/\;session.save_path.*/session.save_path = unix:\/tmp\/memcached.sock/ /etc/php5/fpm/php.ini

Это может быть проще понять, если вы просто используете другой разделитель:

sed -i [email protected]\;session.save_path.*@session.save_path = unix:/tmp/[email protected] /etc/php5/fpm/php.ini
3
добавлено
Благодаря! Это сработало!
добавлено автор Shahrizal Prabowo, источник

У вас есть слэши и пробелы в заменяющем тексте; проще всего использовать другой символ, чтобы отметить начало и конец подстановочных разделов команд, таких как % , и заключить весь скрипт в одинарные кавычки:

sed -i 's%\;session.save_path.*%session.save_path = unix:/tmp/memcached.sock%' \
    /etc/php/fpm/php.ini

Обратите внимание на одинарные кавычки вокруг прогамы; обычно лучше использовать их, чтобы избежать неожиданных расширений метахарактера оболочки.

0
добавлено