Regex 用正则表达式找到一个序列,然后在它旁边或几行找到第二个序列

Regex 用正则表达式找到一个序列,然后在它旁边或几行找到第二个序列,regex,Regex,我会用一个例子更好地解释我的情况 考虑一个httpd.conf文件,其中我需要更改文档根。因此,首先我需要找到服务器名,然后更改文档根,所以我相信这里我需要两个regexp,但我不知道如何操作?是否有人可以提供帮助?或者我只需要找到服务器名并记下行号,然后使用脚本继续查找文档根?谢谢。我不确定,但也许这样的东西对你有用 cat /etc/apache2/http.conf | sed 's/.*ServerName=.*/ServerName=YourNewLocation/' > tmp

我会用一个例子更好地解释我的情况


考虑一个httpd.conf文件,其中我需要更改文档根。因此,首先我需要找到服务器名,然后更改文档根,所以我相信这里我需要两个regexp,但我不知道如何操作?是否有人可以提供帮助?或者我只需要找到服务器名并记下行号,然后使用脚本继续查找文档根?谢谢。

我不确定,但也许这样的东西对你有用

cat /etc/apache2/http.conf | sed 's/.*ServerName=.*/ServerName=YourNewLocation/' > tmp
mv tmp /etc/apache2/http.conf

我不知道为什么需要先搜索ServerName,但下面是如何更改documentroot的方法

awk '/^DocumentRoot/{$0="DocumentRoot /new/root" } {print}' /path/httpd.conf  > temp
mv temp /path/httpd.conf 
或者,如果您正在使用ServerName值创建新的根目录

awk '$1~/ServerName/{servername=$2}
/^DocumentRoot/{
 $0="DocumentRoot "servername  # create your new root here.
}
{print}
' /path/httpd.conf > temp
mv temp /path/httpd.conf

DocumentRoot是否总是在ServerName之后?该语法允许以任意顺序指定DocumentRoot和ServerName,只要它们位于同一VirtualHost sblock中。是的,您是正确的,但在我的情况下,ServerName总是排在第一位。抱歉,我没有仔细阅读您的问题。。。我的回答没有帮助您的版本将更改配置文件中存在的所有DocumentRoot。这就是我需要使用ServerName查找虚拟主机条目并更改其DocumentRoot的原因。谢谢你的回复。