提取版本我有具有低於值的字符串正則表達式從字符串
字符串1 = winos-APP-1.2.0-4.20120308.InLinuxOS.x86_64
我需要提取唯一版本從該字符串是「1.2.0-4」
我試圖正則表達式下面的sed如上所述
sed -ne 's/[^0-9]*\(\([0-9]\.\)\{0,1\}[0-9][^.]\).*/\1/p'
但我只得到結果「1.2.0-」,缺少「 - 」後的數字是4.我試圖糾正它,但它返回null。
請,勸
提取版本我有具有低於值的字符串正則表達式從字符串
字符串1 = winos-APP-1.2.0-4.20120308.InLinuxOS.x86_64
我需要提取唯一版本從該字符串是「1.2.0-4」
我試圖正則表達式下面的sed如上所述
sed -ne 's/[^0-9]*\(\([0-9]\.\)\{0,1\}[0-9][^.]\).*/\1/p'
但我只得到結果「1.2.0-」,缺少「 - 」後的數字是4.我試圖糾正它,但它返回null。
請,勸
怎麼樣的grep:
grep -Po "(?<=-)[\d.-]*(?=.\d{8})"
你能試試嗎?
[^0-9]*\(\([0-9]\.\)\{0,2\}[0-9][^.]\).*
sed -n 's/^.*-\([0-9.]*-[0-9]*\)\..*$/\1/p'
這應該工作,還應考慮任何版本號是多個數字長。
String1=winos-app-1.2.0-4.20120308.InLinuxOS.x86_64
sed -n 's/[^0-9]*\(\([0-9]\+\.\)\{0,2\}[0-9]\+-[0-9]\+\).*/\1/p' <<< "$String1"
1.2.0-4
順便說一句,這也將匹配版本字符串等(從你的問題是不明確的,如果你想這種行爲或不):
1-1
1.2-1
如果要強制執行w.x.y-z
,你可以使用這樣的:
sed -n 's/[^0-9]*\(\([0-9]\+\.\)\{2\}[0-9]\+-[0-9]\+\).*/\1/p' <<< "$String1"
您也可以嘗試參數擴展:
string1=winos-app-1.2.0-4.20120308.InLinuxOS.x86_64
string2=${string1%".${string1#*-*-*-*.}"}
version=${string2#*-*-}
printf "%s\n" "$version"
謝謝!非常。 您是否也可以提供一個註冊前檢查版本 如果我想檢查1.0.0版本中的任何版本可能是「1.0.0-1」或「1.0.0-2」或「1.0.0-3」我只需要檢查它的更新版本是「-1還是-2或-3」 「1.0.0-1或1.0.0-2或1.0.0-3」 我可以使用哪種正則表達式? 「sed -ne s/1.0.0 \ - [0-9] \ 1/p」會工作嗎? 謝謝! sed -n's/1.0.0 \ - [0-9]' – user2150307 2013-03-11 15:07:23