Ser*_*him 5 command-line sed awk text-processing
我正在尝试使用命令行仅获取 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
Run Code Online (Sandbox Code Playgroud)
这是有道理的。
所以现在我想把这条线剪掉:
--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
网上查了一下,好像
/usr/local/nginx/sbin/nginx -V | sed -n -e '/arguments/ s/.*\: *//p'
Run Code Online (Sandbox Code Playgroud)
或者
/usr/local/nginx/sbin/nginx -V | awk -F":" '{print $NF}'
Run Code Online (Sandbox Code Playgroud)
或者
/usr/local/nginx/sbin/nginx -V | egrep -o '\\-\\-'
Run Code Online (Sandbox Code Playgroud)
但他们都只是输出相同的 nginx -V
我理解错了什么?
输出可能会出现标准错误。你需要重定向它:
/usr/local/nginx/sbin/nginx -V 2>&1 | sed -n -e '/arguments/ s/.*\: *//p'
# ~~~~
Run Code Online (Sandbox Code Playgroud)
还有的 :用在每一行,所以你可以把线几个部分分离的:,和你的情况,你想第二场,其中configure arguments字符串显示:
/usr/local/nginx/sbin/nginx -V 2>&1 | awk -F ':' '/configure arguments/{print $2}'
Run Code Online (Sandbox Code Playgroud)
正如在问题下的评论中提到的,输出-V 进入错误流,所以我们必须让它进入stdout流(这是什么2>&1)