shell - 如何使用 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
有什么线索吗?
解决方案
用bash:
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
.
推荐阅读
- javascript - 找不到名称“firebase”.ts(2304)
- java - 使用本机查询的 JPA 查询返回 null 而不是实体列表
- javascript - 是什么让每个嵌入的对象 contentDocument 都“独一无二”,即使有两个(或更多)同一个对象源的实例?
- java - 使用并行流执行基于条件的加法
- ios - Swift 中小数位的 NumberFormatter
- c++ - QMake 未能使用正确的编译器
- javascript - React - 在从另一个类调用的函数中调用 setState 不会引发函数异常
- python - 将函数传递给新函数以读取文件
- php - PHPSpreadsheet - 如何创建红色的文本?
- asp.net-core - 如何在 Identity Server 4 中配置“密钥材料”以使用 SQL、KeyVault 或任何其他系统?