使用bash获取特定格式的Java版本



我的Java版本是:

openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)

如何使用bash脚本获得以下格式的Java版本:1.8.0

我尝试了多种选项,如java -version 2>&1 | head -n 1 | cut -d'"' -f2,但我无法得到所需的输出。

要检查字符串(您期望的版本),可以使用grep:

if java -version 2>&1 | head -n 1 | grep --fixed-strings '"1.8.0'
then echo expected version
else echo unexpected version
fi

注意--fixed-strings(简称-F),否则grep将.视为RegEx,它将匹配任何字符。谢谢Gorodon指出这一点!我还添加了前面的"引号,所以它不会匹配11.8.0

$ IFS='"_' read -r _ ver _ < <(java -version 2>&1)
$ echo "$ver"
1.8.0

你可以试试这个

java --version | head -n1 |cut -d " " -f1,2

openjdk 8.0

您可以使用grep(或egrep)打印匹配的模式:

java --version | head -n 1 | grep -Po '[[:digit:]]{1,3}.[[:digit:]]{1,3}.[[:digit:]]{1,3}'     
java --version | head -n 1 | egrep -o '[[:digit:]]{1,3}.[[:digit:]]{1,3}.[[:digit:]]{1,3}'