忽略sed find和replace命令中的斜杠

时间:2013-04-22 04:08:22

标签: bash sed

我正在尝试使用终端中的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

所以它在路径中的斜杠上出错了。我该如何解决这个问题?

感谢您的帮助

2 个答案:

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

相同
相关问题