在Bash中使用shell脚本从文件中解析版本号

pb3s4cty  于 7个月前  发布在  Shell
关注(0)|答案(1)|浏览(108)

我试图从一个文件中提取版本号,该文件的目录如下所示:

... /directory/to/java/bin/./java -version

从命令行运行该命令会产生以下输出:

java version "1.7.0_269"
Java(TM) SE Runtime Environment (build 7.0.8.10 - pkshd34234hsd284842_01(xop4_))
bla bla bla
whole bunch of 
extra info

我需要提取的只是版本号1.7.0_269(特别是minor/patch(?)版本“269”)。
我对另一个文件做了类似的事情,并使用了以下语法:

JAVA_VER=$("/the/directory/to/jversion.sh" | awk -F'java.version:' '{print $2}' | xargs )

它工作得很好,但由于某种原因,它不适用于这个命令(无可否认,我缺乏bash命令的知识,所以我不确定如何正确修改它):

APP_JAVA_VER=$(/the/directory/to/java/bin/./java -version | awk -F'java version' '{print $2}' | xargs)

它只是不输出任何东西。有人能告诉我正确的方向吗?我看到很多不同的方法来解决这类问题,但我想真正了解我的代码哪里出错了,以及如何修改它。这是不是和它不是.sh文件有关?谢谢你的帮助!

8dtrkrch

8dtrkrch1#

您的问题是java -version输出到STDERR,而awk在STDIN上查找。
试试这个:

APP_JAVA_VER=$(/the/directory/to/java/bin/./java -version 2>&1 | awk -F'java version' '{print $2}' | xargs)

相关问题