提取版本我有具有低于值的字符串正则表达式从字符串
字符串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