【发布时间】:2015-07-15 16:55:23
【问题描述】:
我在 CentOs 中使用 sed 提取版本号,它工作正常:
echo "var/opt/test/war/test-webapp-4.1.56.war" | sed -nre 's/^[^0-9]*(([0-9]+\.)*[0-9]+).*/\1/p'
但我的问题是当版本显示如下时我无法提取:
var/opt/test/war/test-webapp-4.1.56-RC1.war
如果存在 4.1.56-RC1,我想提取它。
有什么想法吗?
编辑 2
可以清楚地看这个例子,带有路径:
有时路径只包含一个序列号,如 var/opt/test/war/test-webapp-4.1.56.war,有时它包含一系列数字和字母,如“ var/opt/test/war/test-webapp-4.1.56-RC1.war
需要根据路径中存在的版本来恢复 4.1.56 或 4.1.56-RC1。使用 sed 或 grep,没有偏好。
这似乎可行,但 .war 显示在末尾:
echo "var/opt/test/war/test-webapp-4.1.56.war" | egrep -o '[0-9]\S*'
【问题讨论】:
-
你为什么不直接说
echo "version ..." | awk '{print $2}'? -
因为可能是从这样的路径中提取的:/var/opt/test/war/test-webapp-4.1.56-RC1.war
-
用完整的输入更新您的问题。
-
我将根据“不清楚你在问什么”投票关闭这个问题,如果你不更新它,这个问题对未来的用户没有帮助。
-
@Marc wrt
because maybe the extract is make from a path like this: /var/opt/test/war/test-webapp-4.1.56-RC1.war- 如果是这样呢?不要在评论中回答这个问题,而是编辑您的问题以显示您希望能够处理的所有可能版本信息格式的示例以及每种格式的预期输出。