我正在尝试编写一个小shell脚本来完成在新安装的Mountain Lion上启用apache和php所需的步骤。我坚持的步骤是进入/etc/apache2/httpd.conf
并取消注释这一行:#LoadModule php5_module libexec/apache2/libphp5.so
到目前为止谷歌搜索我认为sed就是这样做的方式,但我无法正确理解语法。我试过这个:
cd /etc/apache2
sudo sed -i '/s/#LoadModule php5_module libexec\/apache2\/libphp5.so/LoadModule php5_module libexec\/apache2\/libphp5.so' httpd.conf
我认为会用未注释的行替换注释行(转义斜杠)。但是当我运行它时,我只是得到以下消息,并且没有结果文件:
sed: 1: "httpd.conf": extra characters at the end of h command
我对这种类型的脚本不太重视,我该如何完成这项任务?
答案 0 :(得分:6)
您可以使用逗号。
sed -i 's,#LoadModule php5_module libexec/apache2/libphp5.so,LoadModule php5_module libexec/apache2/libphp5.so,g'
或
sed -i 's,#\(LoadModule php5_module libexec/apache2/libphp5.so\),\1,g' foo.txt
答案 1 :(得分:1)
删除第一个/
:
sed -i 's/...'
答案 2 :(得分:1)
还有另一种方式:
sudo sed -i '/#LoadModule php5_module libexec\/apache2\/libphp5.so/s/#//' httpd.conf
答案 3 :(得分:0)
正确的语法是
's/#LoadModule php5_module libexec\/apache2\/libphp5.so/LoadModule php5_module libexec\/apache2\/libphp5.so/'
斜杠/可以被另一个字符(例如)更改,以避免转义斜杠 点。必须在模式中转义(左侧部分)否则它意味着任何字符
's-#LoadModule php5_module libexec/apache2/libphp5\.so-LoadModule php5_module libexec/apache2/libphp5.so-'