我正在尝试使用终端中的sed进行查找和替换。
在apache配置文件中,我正在尝试替换:
DocumentRoot /var/www
与
DocumentRoot /var/www/mysite.com/public_html
从命令行,不使用编辑器。我想用sed做这个,我尝试了各种迭代:
sudo sed -i 's/'DocumentRoot /var/www'/'DocumentRoot /var/www/mysite.com/public_html'/' /etc/apache2/sites-available/mysite.com
然而,当这样做时,我收到此错误:
sed: -e expression #1, char 14: unterminated s command
所以它在路径中的斜杠上出错了。我该如何解决这个问题?
感谢您的帮助
答案 0 :(得分:7)
没有必要使用/
作为正则表达式分隔符。当正则表达式包含您需要逃脱的#
时,您可以使用@
或/
。
sed -i s#expr1#expr2#
所以,它可能是:
sudo sed -i 's#DocumentRoot /var/www#DocumentRoot /var/www/mysite.com/public_html#' /etc/apache2/sites-available/mysite.com
此外,由于您的substitution-argument本身包含空格,您需要将它们用单引号括起来。
答案 1 :(得分:3)
在/
中使用sed
作为分隔符不是强制性的。 sed 's/hi/hey/
与sed 's#hi#hey#'