我需要提取的版本号为输出版本类似如下:获取变量版本号
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'两对之间的空格 –