我需要提取的版本號爲輸出版本類似如下:獲取變量版本號
Program updated version 7.9
Released on 04-04-2013
我知道如何提取兩位數的版本號:
grep -Po '(version)\d+(?:\.\d+){2}')
或其他任何位數。問題是版本號可能有不同的位數。是否有一個正則表達式,我可以使用一個由點分隔的幾個數字組,只要數字的位數是未知的?
我需要提取的版本號爲輸出版本類似如下:獲取變量版本號
Program updated version 7.9
Released on 04-04-2013
我知道如何提取兩位數的版本號:
grep -Po '(version)\d+(?:\.\d+){2}')
或其他任何位數。問題是版本號可能有不同的位數。是否有一個正則表達式,我可以使用一個由點分隔的幾個數字組,只要數字的位數是未知的?
隨着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
有了這個和@ fedorqui的建議,我遇到了我上面描述的成對分裂的問題。是否只有我有這個問題? –
@fa__如果你提供像'7.9 9.9'這樣的空間,那麼顯然你會得到'7.9'。我不明白你的意思? –
問題是我不提供這個空間。我寫了'7.9.9.9'。 –
''\ d [\ d \。] *'' - 正則表達式,用於以數字開頭且僅包含數字和點的字符串 –
@tampis我剛剛嘗試了您的建議,但我仍然只獲得2位數字。我不知道我是否做錯了。我使用version = $(echo $ output | grep -Po'\ d [\ d \。] *')。 –
謝謝@Jayesh。該柱不固定。我已經測試了您的解決方案,我不知道爲什麼,但是它將這些數字成對排序。例如''程序更新版本7.9「'輸出爲'7.9'對於'」程序更新版本7.9.9「'輸出仍然是'7.9',對於'」程序更新版本7.9.9.9「'輸出是'7.9 9.9'兩對之間的空格 –