2011-09-22 105 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/"