我正在尝试使用sed替换php.ini配置文件中的字符串:php.ini。我需要在另一个脚本中使用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 :(得分:3)
您需要在第二个示例的替换方面转义/
个字符:
sed -i s/\;session.save_path.*/session.save_path = unix:\/tmp\/memcached.sock/ /etc/php5/fpm/php.ini
如果你只是使用不同的分隔符,可能会更容易理解:
sed -i s@\;session.save_path.*@session.save_path = unix:/tmp/memcached.sock@ /etc/php5/fpm/php.ini
答案 1 :(得分:0)
你在替换文字中有斜线和空格;最简单的方法是使用不同的字符来标记替换命令部分的开头和结尾,例如%
,并将整个脚本用单引号括起来:
sed -i 's%\;session.save_path.*%session.save_path = unix:/tmp/memcached.sock%' \
/etc/php/fpm/php.ini
注意程序周围的单引号;通常最好使用它们来避免意外的shell元字符扩展。