我在多个主机上有多个 Apache vHost 配置。我正在尝试编写一个 Bash 脚本,它将迭代每个主机并搜索 .conf
对每个文件进行归档,取出第一个(仅第一个)<VirtualHost>
堵塞。我尝试编写一个正则表达式来匹配它,但它不起作用。这是我尝试过的代码:
#!/bin/bash
egrep -o '(\<VirtualHost\>)(.*)(\<\/VirtualHost\>)' -m1
自 .*
与换行符不匹配,我什至尝试过:
#!/bin/bash
egrep -o '(\<VirtualHost\>)(.*[\S]*)(\<\/VirtualHost\>)' -m1
我还是一无所获。 :-(
我不明白我在这里做错了什么。以下是我尝试匹配的数据示例:
<VirtualHost apache-frontend:80>
ServerAdmin <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="701d090319041530141f1d11191e5e131f1d" rel="noreferrer noopener nofollow">[email protected]</a>
ServerName domain.com
DocumentRoot /path/to/my/doc/root
RewriteEngine On
Include include.d/global/rewrite.conf
RewriteRule ^(.*)$ http://www.domain.com$1 [R=301,L]
</VirtualHost>
<VirtualHost apache-frontend:80>
ServerAdmin <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="335e4a405a475673575c5e525a5d1d505c5e" rel="noreferrer noopener nofollow">[email protected]</a>
ServerName domain.com
DocumentRoot /path/to/my/doc/root
RewriteEngine On
Include include.d/global/rewrite.conf
RewriteRule ^(.*)$ http://www.domain.com$1 [R=301,L]
</VirtualHost>
<VirtualHost apache-frontend:80>
ServerAdmin <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="137e6a607a677653777c7e727a7d3d707c7e" rel="noreferrer noopener nofollow">[email protected]</a>
ServerName domain.com
DocumentRoot /path/to/my/doc/root
RewriteEngine On
Include include.d/global/rewrite.conf
RewriteRule ^(.*)$ http://www.domain.com$1 [R=301,L]
</VirtualHost>
最佳答案
此 oneliner 仅从配置文件中提取第一个 VirtualHost block :
awk '/<VirtualHost/,/<\/VirtualHost>/{print $0} /<\/VirtualHost>/{exit}' < vhostconf
关于regex - egrep 匹配多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35930359/