2011-09-22 104 views
2

我想要达到与sed: Extract version number from string中所解释的相同的效果,但仅考虑第一个数字序列或更安全,请告诉sed仅保留数字跟在命令的名字后面,剩下的就是其余的数字。sed从字符串中提取版本号(仅限版本,不包含其他数字)

I have:铬12.0.742.112的Ubuntu 11.04

I want: 12.0.742.112

Instead of: 12.0.742.11211.04

我现在知道,使用头部或尾部与排序,可以显示最大/最小的数字,但我怎么能告诉sed只考虑第一个序列?

编辑:我忘了提及我使用bash。

回答

13

第一个数字?如何:

sed 's/[^0-9.]*\([0-9.]*\).*/\1/' 
1

随着cut(假设你总是希望信息的就行了第二位):

$ echo "Chromium 12.0.742.112 Ubuntu 11.04" | cut -d' ' -f2 
12.0.742.112 
+0

哦,不,有时候版本之前的名称 – octosquidopus

+0

@octosquidopus,那么,我们怎么知道你想要哪个版本? – Kusalananda

+0

我想要命令后面的数字,如果不存在,则显示第一个数字。 – octosquidopus

0

下面的Perl命令它:

echo "Chromium 12.0.742.112 Ubuntu 11.04" | perl -ne '/[\d\.]+/ && print $&' 
1

很好,如果你使用bash,如果你想要的东西永远是第二场,

$ string="Chromium 12.0.742.112 Ubuntu 11.04" 
$ set -- $string; echo $2 
12.0.742.112 
3

下面是一个不依赖于该命令的位置的解决方案在你的字符串,但是会拿起后,无论发生什么事:

command="Chromium" 

string1="Chromium 12.0.742.112 Ubuntu 11.04" 
string2="Ubuntu 11.04 Chromium 12.0.742.112" 

echo ${string1} | sed "s/.*${command} \([^ ]*\).*$/\1/" 
echo ${string2} | sed "s/.*${command} \([^ ]*\).*$/\1/"