如何检索变量,即给定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;
答案 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