Bash从nginx.conf解析server_name

时间:2017-05-04 19:25:16

标签: bash nginx awk sed grep

如何检索变量,即给定nginx.conf vhost中private属性中的第一个域?

我的vhosts存储为从主nginx.conf中分离出来的文件,虽然我可以grep并显示每个文件,但我想要做的就是抓住它找到的第一个域并回显它(最终,我&# 39;将它放入变量中,以便我可以在其他地方使用它)

所以...如果我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;

3 个答案:

答案 0 :(得分:2)

使用GNU grep和Perl regexes:

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

-m1只接受第一场比赛,-P Perl正则表达式,-o仅打印匹配的部分。\K是Perl,用于“忘记此前的所有内容”,所以只有以下部分由-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

答案 1 :(得分:1)

grep "server_name" a|head -1|sed 's/^\s*//g'|cut -d ' ' -f2

答案 2 :(得分:0)

这适用于任何UNIX系统上的任何awk:

awk '$1=="server_name"{sub(/;/,""); print $2; exit}' file