今天碰到一个奇葩问题,各位可以试一试。
想拿到 java -version 输出结果中的精确版本号, 例如下面结果中的 1.8.0_91
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
发现无法使用 grep / sed / awk 来过滤, 被恶心到了
这个问题其实很简单,这个是 stderr 输出, grep / sed / awk 等管道工具看不见,重定向一下就可以了………………
java -version 2>&1 |grep -oP '(?<=").*(?=")'
PS. 新版本的 jdk, 我这里是 jdk11, 有另一个参数 java --version 是 stdout ,可以正常对结果进行过滤,注意是两个横线。