首页 > 解决方案 > 如何使用 sed 从输出字符串中提取 Nginx 版本号(仅)?

问题描述

我遇到了一个奇怪的情况:我试图用 sed 提取 nginx 的版本,但它不起作用,只有字符串版本有效:

[root@hostname~]# echo $(nginx -v) | sed -n 's/nginx version: nginx\///p'
nginx version: nginx/1.16.1

[root@hostname~]# nginx -v | sed -n 's/nginx version: nginx\///p'
nginx version: nginx/1.16.1

[root@hostname~]# echo 'nginx version: nginx/1.16.1' | sed -n 's/nginx version: nginx\///p'
1.16.1

有什么线索吗?

标签: shellsed

解决方案


nginx -v |& sed 's/nginx version: nginx\///'

甚至更短/更简单:

nginx -v |& grep -oP '/\K.*'

或者对于 POSIX shell:

nginx -v 2>&1 | sed 's/nginx version: nginx\///'

|&部分是一个经典的管道,但使用特殊技巧重定向STDERR到。STDOUT&

因为nginx -v错误输出上的输出,又名STDERR.


推荐阅读