使用正则表达式在配置文件中查找端口

时间:2015-03-28 16:48:21

标签: regex bash

在配置文件(nginx default.conf)中我得到了一些这样的字符串:

server {
        listen   80;
        server_name sudomain1.somewhere.com ;
        location / {
                proxy_set_header Host sudomain1.somewhere.com;
                proxy_pass         http://127.0.0.1:8999/;
                }
}

在bash脚本中,我想抓住端口号" 8999 "在一个变量中,在脚本中使用它。

如果可能的话,使用上面的整个字符串。

因为在该文件中我有多次这个序列,唯一的变量标记我是" subdomain1 "

有谁知道怎么做?

2 个答案:

答案 0 :(得分:3)

尝试使用GNU grep:

port="$(grep -A 1 'proxy_set_header.*sudomain1\.' file | grep -Po ':\K[0-9]+(?=/)')"
echo $port

输出:

8999

答案 1 :(得分:3)

您可以使用单行执行此操作:

( ln=$(grep -A 1 sudomain1 nginxconf.txt | tail -n1); port=${ln##*:}; port=${port%/*}; echo "port: $port" )

或作为剧本:

#!/bin/bash

ln=$(grep -A 1 sudomain1 nginxconf.txt | tail -n1)

port=${ln##*:}
port=${port%/*}

echo "port: $port"

首先使用sudomain1找到grep -A 1和后面的行,然后使用tail -n仅保留最后一行。然后,通过简单的参数匹配/子串提取来隔离8999

<强>输出

port: 8999

注意:在您的配置文件中将subdomain1拼写为sudomain1