2014-04-07 97 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'。 –