You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用grep格式化Apache虚拟主机配置文件输出,将每个虚拟主机的ServerName与DocumentRoot合并为一行

如何使用grep格式化Apache虚拟主机配置文件输出,将每个虚拟主机的ServerName与DocumentRoot合并为一行

我明白你现在的需求啦——用grep抓出了每个虚拟主机的ServerName和DocumentRoot,但它们是分开的两行,想把每对儿合并成一行对吧?单靠grep确实搞不定这个合并的事儿,得搭配点其他文本处理工具,给你两个简单好用的方法:

方法一:用grep+paste快速合并行

先用grep过滤出需要的行,再用paste把相邻两行合并:

grep -e ServerName -e DocumentRoot virtual-host.conf | paste - -

如果你的配置里有带#的注释行,不想把注释掉的内容也抓进来,可以加个排除注释的参数:

grep -v "^#" -e ServerName -e DocumentRoot virtual-host.conf | paste - -

解释一下:paste - -的作用就是把标准输入的内容每两行合并成一行,默认用制表符分隔。要是你想改成用空格分隔,就加-d " "参数,比如paste -d " " - -。

方法二:用awk灵活处理(推荐)

awk比paste更灵活,能直接在扫描文件时完成配对输出,命令如下:

awk '/ServerName/ {sn=$0} /DocumentRoot/ {print sn, $0}' virtual-host.conf

解释一下逻辑:当awk匹配到ServerName行时,把整行内容存到变量sn里;等匹配到对应的DocumentRoot行时,就把之前存的sn和当前的DocumentRoot行一起打印出来,刚好就是一行对应一个虚拟主机的信息。
如果要排除注释行,直接在匹配规则里加个判断就行:

awk '!/^#/ {if (/ServerName/) sn=$0; else if (/DocumentRoot/) print sn, $0}' virtual-host.conf

备注:内容来源于stack exchange,提问作者iksmax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 08:44:38