【问题标题】:Bash replace minor version in version stringBash 替换版本字符串中的次要版本
【发布时间】:2021-05-04 17:41:14
【问题描述】:

我正在寻找一种优雅的方式(bash 单行)来替换语义版本号的一部分。这些版本看起来像 7.12.0-0。我需要用比字符串中的数字大 2 的数字替换次要版本。

  • 原字符串:7.12.0-0
  • 结果字符串 7.14.0-0

【问题讨论】:

    标签: linux bash ubuntu


    【解决方案1】:

    使用 awk:

    echo "7.12.0-0" | awk -F. '{print $1"."($2+2)"."$3}'
    >7.14.0-0
    

    echo "7.12.0-0" | awk 'BEGIN{OFS=FS="."}{$2+=2}1'
    >7.14.0-0
    

    【讨论】:

    • 因为我们在打高尔夫球,第二个可以使用$2+=2 ;)
    • @BenjaminW。这就是我所缺少的!将更新以完成推杆。
    【解决方案2】:

    简单的 bash

    ver="7.12.0-0"
    
    # split on dots into the "parts" array
    IFS="." read -ra parts <<<"$ver"
    
    # increment the 2nd array element
    ((parts[1] += 2))
    
    # join on dots
    newver=$(IFS="."; echo "${parts[*]}")
    
    echo $newver     # => 7.14.0-0
    

    【讨论】:

    • 是否有可能将所有这些组合成一条线?
    • 否,但可以进入函数。
    【解决方案3】:

    使用gnu sed:

    s='7.12.0-0'
    sed -E 's/^([0-9]*\.)([0-9]+)(\..+)/echo \1$((\2+2))\3/e' <<< "$s"
    
    7.14.0-0
    

    【讨论】:

      【解决方案4】:

      仅使用 bash 变量扩展和cut:

      v=17.12.0-0
      add=2
      echo ${v%%.*}.$(( $add + $(echo $v | cut -d . -f 2) )).${v##*.}
      # output 17.14.0-0
      

      【讨论】:

        猜你喜欢
        • 2020-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-13
        • 1970-01-01
        • 1970-01-01
        • 2016-10-05
        相关资源
        最近更新 更多