我希望实现与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。答案 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 $&'