【发布时间】:2021-03-11 14:42:54
【问题描述】:
我正在尝试使用regular-expressions 提取jdk 的版本实际上我有以下版本:
openjdk 11.0.9.1 2020-11-04
OpenJDK Runtime Environment (build 11.0.9.1+1-Ubuntu-0ubuntu1.18.04)
OpenJDK 64-Bit Server VM (build 11.0.9.1+1-Ubuntu-0ubuntu1.18.04, mixed mode,sharing)
我写了正则表达式。它如下所示:
^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}$
此正则表达式正在在线正则表达式测试器上运行 (https://regex101.com/)。不幸的是,它不适用于 grep-command。我正在使用扩展正则表达式。我的 jdk-version 提取代码如下所示:
CMD_RESULT=$(java --version 2>&1 | head -n 1 | cut -d '' -f 2)
if [ ! -z "$CMD_RESULT" ]
then
for token in $CMD_RESULT
do
JAVA_VERSION=$(echo $token | grep -e $VERSION_EXTRACTION_REGEX)
if [ ! -z $JAVA_VERSION ];
then
printf "${GREEN}Java version: [$JAVA_VERSION]\n"
fi
done
fi
我不明白,为什么我的正则表达式正在在线正则表达式检查器上工作,而它却不能与 grep 命令一起工作。我将参数 -e 用于扩展正则表达式。
有什么想法吗?
【问题讨论】:
-
欢迎来到 SO,很高兴你在你的问题中展示了你的尝试,继续努力。您能否使用代码标签在您的问题中发布
java --version命令的输出,以便更好地理解您的问题。 -
您的正则表达式完全错误;
^匹配行首,$匹配行尾,其间的所有内容仅限于数字 ([0-9]) 和点 (\.)。此外,grep -e不足以支持此正则表达式,因此您可能必须使用扩展 (grep -E)。 -
为了清楚起见,您能否在问题中提及预期输出示例,您要打印哪一行的版本,请在您的问题中明确提及。