【问题标题】:Replace version number in a string using sed使用 sed 替换字符串中的版本号
【发布时间】:2016-06-09 21:44:52
【问题描述】:

我在文件中设置了捆绑版本,如下所示:

"dist/app-build-v1.08": {

如何 sed 版本号并将其换成递增的数字?

首先,我尝试获取该行本身,这是我的捆绑文件中的第三行。

BUILD=$(sed '3q;d' ./build/bundles.js)

这确实抓住了这条线。我在堆栈溢出时发现了这个 sn-p:

's/[^0-9.]*\([0-9.]*\).*/\1/'

我想在 $BUILD 上使用它,但它不起作用。我的预期输出是

$NUM = "1.08"

然后我想将它增加到 1.09,重建字符串并使用sed -i 替换它。

【问题讨论】:

    标签: linux sed


    【解决方案1】:

    似乎有趣的行总是第 3 行。那么你可以使用这个 awk one-liner:

    awk 'NR==3{gsub(/[^.0-9]+/,"");$0+=0.01;print}' file.js
    
    • 此行以line3为主,取版本号,加0.01
    • 假设您的版本格式始终为x.xx。如果不是这种情况,也可以动态计算增量。比如0.01 or 0.00001,但是需要额外的实现。
    • 如果你用你的示例文件运行它,它会给你1.09

    【讨论】:

      【解决方案2】:

      另一种方式:

      sed -r '3s/.*build-v([0-9]+(\.[0-9]+)?).*/\1+0.01/' | bc -q
      

      示例:

      $ echo '"dist/app-build-v1.08": {' | sed -r 's/.*build-v([0-9]+(\.[0-9]+)?).*/\1+0.01/' | bc -q
      1.09
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-11
        • 2019-08-24
        • 2021-03-01
        • 1970-01-01
        • 2022-12-17
        • 2021-03-23
        • 2020-07-23
        • 2020-03-27
        相关资源
        最近更新 更多