为什么我的 awk 模式与 nginx -V 的配置参数不匹配?

为什么我的 awk 模式与 nginx -V 的配置参数不匹配?

我正在尝试使用命令行获取 Ubuntu 14.04 上编译的 nginx 的配置参数。

跑步/usr/local/nginx/sbin/nginx -V给我们带来:

nginx version: nginx/1.8.1
built by gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.1)
built with OpenSSL 1.0.1f 6 Jan 2014
TLS SNI support enabled
configure arguments: --with-http_ssl_module --with-http_stub_status_module --add-module=/usr/local/src/nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d --with-http_sub_module

这是有道理的。

所以现在我想把这一行剪掉,使其变为:

--使用-http_ssl_module --使用-http_stub_status_module --添加模块=/usr/local/src/nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d --使用-http_sub_module

在网上查看后,似乎

/usr/local/nginx/sbin/nginx -V | sed -n -e '/arguments/ s/.*\: *//p'

或者

/usr/local/nginx/sbin/nginx -V | awk -F":" '{print $NF}'

或者

/usr/local/nginx/sbin/nginx -V | egrep -o '\\-\\-'

但它们都只是输出相同的内容nginx -V

我理解错了什么?

答案1

每行都使用了 :,因此您可以将行视为由分隔的几个部分:,并且在您的情况下,您需要configure arguments出现字符串的第二个字段:

/usr/local/nginx/sbin/nginx -V  2>&1 | awk -F ':' '/configure arguments/{print $2}' 

正如问题下的评论中提到的那样,的输出-V 进入错误流,所以我们必须让它进入流stdout(这就是所做2>&1的)

答案2

输出可能会转到标准错误。您需要重定向它:

/usr/local/nginx/sbin/nginx -V 2>&1 | sed -n -e '/arguments/ s/.*\: *//p'
#                              ~~~~

相关内容