使用正则表达式检查shell脚本中的版本

时间:2013-03-11 15:10:33

标签: regex shell

是否有人建议使用reg ex检查版本 如果我想检查1.0.0版本中的任何更新版本,可能是1.0.0-11.0.0-21.0.0-3,我只需要检查它的更新版本-1 or -2 or -3 1.0.0-11.0.0-21.0.0-3我可以使用哪种正则表达式? 试过

sed -ne s/1.0.0\-[0-9]\1/p

谢谢!

3 个答案:

答案 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)