2014-04-07 99 views
0

我需要提取的版本号为输出版本类似如下:获取变量版本号

Program updated version 7.9 
    Released on 04-04-2013 

我知道如何提取两位数的版本号:

grep -Po '(version)\d+(?:\.\d+){2}') 

或其他任何位数。问题是版本号可能有不同的位数。是否有一个正则表达式,我可以使用一个由点分隔的几个数字组,只要数字的位数是未知的?

+1

''\ d [\ d \。] *'' - 正则表达式,用于以数字开头且仅包含数字和点的字符串 –

+0

@tampis我刚刚尝试了您的建议,但我仍然只获得2位数字。我不知道我是否做错了。我使用version = $(echo $ output | grep -Po'\ d [\ d \。] *')。 –

+0

谢谢@Jayesh。该柱不固定。我已经测试了您的解决方案,我不知道为什么,但是它将这些数字成对排序。例如''程序更新版本7.9“'输出为'7.9'对于'”程序更新版本7.9.9“'输出仍然是'7.9',对于'”程序更新版本7.9.9.9“'输出是'7.9 9.9'两对之间的空格 –

回答

1

随着grep

#!/bin/sh 
version=$(echo "Program updated version 7.9.9.9" | grep -oP "(?<=version)[^ ]+") 
echo $version 

输出:

$ ./test.sh 
7.9.9.9 

awk

#!/bin/sh 
version=$(echo "Program updated version 7.9.9.9" | awk '{for(i=1;i<=NF;i++) if ($i=="version") print $(i+1)}') 
echo $version 

输出:

$ ./test.sh 
7.9.9.9 
+0

有了这个和@ fedorqui的建议,我遇到了我上面描述的成对分裂的问题。是否只有我有这个问题? –

+0

@fa__如果你提供像'7.9 9.9'这样的空间,那么显然你会得到'7.9'。我不明白你的意思? –

+0

问题是我不提供这个空间。我写了'7.9.9.9'。 –