【问题标题】:checking version in shell script using regex使用正则表达式检查 shell 脚本中的版本
【发布时间】:2013-03-11 15:10:33
【问题描述】:

任何人都可以建议一个用于检查版本的 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

谢谢!

【问题讨论】:

    标签: regex shell


    【解决方案1】:

    大概是这样的?:

    $ 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 在命令的替换部分输出模式。

    【讨论】:

      【解决方案2】:

      这里你真的不需要正则表达式;只需将字符串拆分为正确的字符:

      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)
      

      【讨论】:

        【解决方案3】:

        这将只留下更新版本号:

        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/环境中还有其他方法可以做到这一点。

        【讨论】:

        • 谢谢!但我只是在寻找检查脚本中的更新
        • 谢谢!但我只是在寻找正则表达式来检查这样的东西 if ("1.0.0-any version") "run this command " else don't run e.g $ver = 1.0.0-2 if [ -z "$(echo $ver | awk '/7.0.0-*/')" ];然后date #
        • 抱歉,您似乎正在尝试进行替换(这就是 sed 中的 's' 命令所做的)以隔离版本的更新部分。
        猜你喜欢
        • 1970-01-01
        • 2010-12-10
        • 1970-01-01
        • 1970-01-01
        • 2019-03-27
        • 2012-01-25
        • 1970-01-01
        • 2016-06-25
        • 2016-06-06
        相关资源
        最近更新 更多