提问人:TorusWithSprinkles 提问时间:8/11/2023 更新时间:8/11/2023 访问量:80
在 Bash 中使用 shell 脚本从文件解析版本号
Parsing version number from file using shell script in Bash
问:
我正在尝试从目录如下所示的文件中提取版本号:
... /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文件有关吗?感谢您的帮助!
答:
2赞
tink
8/11/2023
#1
您的问题是输出到 STDERR,而 awk 在 STDIN 上查看。java -version
试试这个:
APP_JAVA_VER=$(/the/directory/to/java/bin/./java -version 2>&1 | awk -F'java version' '{print $2}' | xargs)
评论
0赞
Paolo
8/11/2023
为什么要输出到 stderr?java --version
0赞
tink
8/11/2023
@Paolo 问问 java 开发人员......这就是它在我的系统上所做的。
0赞
Paolo
8/11/2023
哦,是的,你是对的。疯狂
3赞
Ed Morton
8/11/2023
我怀疑 OP 可能只需要或也许而不是.awk -F'"' '{print $2; exit}'
awk -F'"' '/java version/{print $2; exit}'
awk -F'java version' '{print $2}' | xargs
1赞
TorusWithSprinkles
8/11/2023
谢谢你们俩!仅供其他阅读者参考,这两种解决方案都非常有效。真的很感激
评论