使用sed取消注释httpd.conf中的一行

时间:2012-07-26 07:07:05

标签: apache bash shell config zsh

我正在尝试编写一个小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

我对这种类型的脚本不太重视,我该如何完成这项任务?

4 个答案:

答案 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-'