是否有人建议使用reg ex检查版本
如果我想检查1.0.0版本中的任何更新版本,可能是1.0.0-1
或1.0.0-2
或1.0.0-3
,我只需要检查它的更新版本-1 or -2 or -3
1.0.0-1
或1.0.0-2
或1.0.0-3
我可以使用哪种正则表达式?
试过
sed -ne s/1.0.0\-[0-9]\1/p
谢谢!
答案 0 :(得分:0)
也许这样的事情?:
$ echo "1.0.0-1" | sed -ne 's/1.0.0\(\-[0-9]\)/\1/p'
-1
获取任何版本的更新编号的正则表达式将是:
$ echo "1.0.0-1" | sed -ne 's/[0-9]\+\.[0-9]\+\.[0-9]\+\(\-[0-9]\)/\1/p'
-1
诀窍是在\(
和\)
分组括号之间捕获所需的输出,并使用\1
在命令的替换部分中输出模式。
答案 1 :(得分:0)
这将只保留更新版本号:
echo "1.0.0-1" | sed -e 's/^[1-9][0-9.]*-//'
这将留下领先的“ - ”:
echo "1.0.0-1" | sed -e 's/^[1-9][0-9.]*//'
上面不需要p命令,所以我离开了它,并且关闭了-n选项,但如果这部分是更复杂的sed脚本,你可以恢复它们。
编辑:OP显然只是想知道该版本是否包含更新。以下是经典bourne shell中的几种方法:
#!/bin/sh
version='1.0.0-1'
case "$version" in
*-[1-9]*) # Not a regex, this is a (file) "pattern"
# Update triggered code here
;;
esac
# Or:
if echo "$version" | grep '-[1-9][0-9]*$' >/dev/null ; then
# Update triggered code here
fi
当然,还有其他方法可以在其他shell /环境中执行此操作。
答案 2 :(得分:0)
这里你真的不需要正则表达式;只需将字符串拆分为正确的字符:
version=1.0.0-2
major=$(echo $version | cut -d. -f1 )
minor=$(echo $version | cut -d. -f1 )
patchlvl=$(echo $version | cut -d. -f1 | cut -d - -f1 )
build=$(echo $version | cut -d - -f2)