我正在尝试使用正确的正则表达式从sed的httpd-vhosts.conf中删除虚拟主机项。
我想删除一个这样的块:
<VirtualHost *:80>
ServerName local.testsite.org
DocumentRoot "/home/sites/local.testsite.org/www"
ErrorLog "/home/sites/local.testsite.org/logs/error_log"
CustomLog "/home/sites/local.testsite.org/logs/access_log" common
<Directory "/home/sites/local.testsite.org/www">
AllowOverride All
Order Allow,Deny
Allow from All
</Directory>
</VirtualHost>
我的正则表达式与之匹配(https://regex101.com/r/Owis8w/3):
/<VirtualHost \*:80>\n\tServerName local.duudaduu.com(.|\n)*<\/VirtualHost>/
如何在sed中使用此表达式,我不知道如何在sed中使用此表达式...
sed '/<VirtualHost \*:80>\n\tServerName local.testsite.org(.|\n)*<\/VirtualHost>/' /usr/local/etc/httpd/extra/httpd-vhosts.conf
答案 0 :(得分:0)
我最终放弃了此方法,而采用了一种更简单的方法来为每个主机使用单独的.conf文件在apache上创建和删除virtualHosts。这样,我就可以创建或删除文件,而不必在文件中搜索多行字符串。
我想为Mac上apache中的每个虚拟主机加载一个单独的.conf文件(apache等安装了自制软件)。
这很容易在我的httpd.conf中设置。代替查找文件,只需使用etc/httpd/vhosts/*.conf
查找目录中的所有文件:
# Virtual hosts
# Include /usr/local/etc/httpd/extra/httpd-vhosts.conf # Original rule
Include /usr/local/etc/httpd/vhosts/*.conf # New rule
这将查找并包括该文件夹中的所有.conf文件。我的文件名如下:local.website.com.conf
,其中包含以下内容:
<VirtualHost *:80>
ServerName local.website.com
DocumentRoot "/Users/john/Sites/local.website.com/www"
<Directory "/Users/john/Sites/local.website.com/www">
AllowOverride All
Order Allow,Deny
Allow from All
</Directory>
</VirtualHost>
使用这种方法,您只需删除.conf文件,重新启动apache即可!