任何人都可以建议一个用于检查版本的正则表达式如果我想检查 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
谢谢 !
这将只留下更新版本号:
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/环境中还有其他方法可以做到这一点。
您在这里并不需要正则表达式;只需将字符串拆分为正确的字符:
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)
也许是这样的?:
$ 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
在命令的替换部分中输出模式。