SED:从httpd-vhosts.conf中删除虚拟主机

时间:2019-02-28 09:32:18

标签: regex bash sed

我正在尝试使用正确的正则表达式从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

1 个答案:

答案 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即可!