手机版

如何使用Bash解析nginx.conf中server_name的第一个域名

时间:2020-03-30 来源:互联网 编辑:宝哥软件园 浏览:

问题

在指定的nginx.conf vhost配置文件中,如何获取server_name变量的第一个域名?
vhosts配置文件是与nginx.conf分离的,通过include引入,现在我能使用grep显示server_name的行内容,不过我仅想要第一个域名。
所以,如果我执行grep “server_name” /each/vhost/conf,将输出:

root@getyou:/home# grep "server_name" /home/site-configs/getyou
        server_name getyou.onl;
        server_name www.getyou.onl getme.onl www.getme.onl;
root@getyou:/home# grep "server_name" /home/site-configs/kevinpirnie
        server_name kevinpirnie.com www.kevinpirnie.com;
root@getyou:/home# grep "server_name" /home/site-configs/airsweepinc
        server_name airsweepinc.com www.airsweepinc.com;
root@getyou:/home# grep "server_name" /home/site-configs/themedepot
        server_name theme-depot.net www.theme-depot.net;

而我想输入下面的:

root@getyou:/home# grep "server_name" /home/site-configs/getyou
        getyou.onl
root@getyou:/home# grep "server_name" /home/site-configs/kevinpirnie
        kevinpirnie.com
root@getyou:/home# grep "server_name" /home/site-configs/airsweepinc
        airsweepinc.com
root@getyou:/home# grep "server_name" /home/site-configs/themedepot
        theme-depot.net

最佳答案

使用GNU grep和Perl正则:

$ grep -m1 -Poe 'server_name K[^; ]+' getyou
getyou.onl

(-m1 仅获取第一个匹配,-P Perl正则,-o 只打印匹配的部分。K 这之前匹配的都废弃,所以这之后的将由于-o打印)
或者,如果无法使用grep -P,可以使用同样效果的Perl:

$ perl -lne 'if (/server_name ([^ ;]+)/) {print $1; exit 0}' getyou

或者GNU sed:

$ sed -ne '/server_name/{s/.*server_name //; s/[; ].*//; p; q}' getyou

版权声明:如何使用Bash解析nginx.conf中server_name的第一个域名是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。

相关文章推荐