sed从字符串中提取版本号(仅限版本,不带其他数字)

时间:2011-09-22 14:27:31

标签: regex bash shell sed

我希望实现与sed: Extract version number from string中解释的相同,但只考虑第一个数字序列甚至更安全,告诉sed只保留命令名后面的数字序列,省略其余的。

I have: Chromium 12.0.742.112 Ubuntu 11.04

I want: 12.0.742.112

Instead of: 12.0.742.11211.04

我现在知道使用head或tail进行排序可以显示最大/最小数字,但是如何告诉sed只考虑第一个序列?

编辑:我忘了提到我正在使用bash。

5 个答案:

答案 0 :(得分:14)

第一个号码?怎么样:

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

答案 1 :(得分:4)

这是一个不依赖于你的字符串中的命令位置的解决方案,但是它会拾取它之后的任何内容:

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/"

答案 2 :(得分:1)

使用cut(假设您总是希望该行的第二位信息):

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

答案 3 :(得分:1)

好吧,如果你正在使用bash,如果你想要的总是在第二场,

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

答案 4 :(得分:0)

以下perl命令执行此操作:

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