使用sed命令替换字符串中的版本号

6

我需要在一个文件中设置捆绑版本,格式如下:

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

如何使用sed命令获取版本号并将其替换为递增的数字?

首先,我尝试获取文件中的第三行,也就是要替换的版本号所在的行。

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

这确实获取了该行的内容。我在stackoverflow网站上找到了这段代码:

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

我想在 $BUILD 上使用它,但是它无效。对我来说,期望的输出应该是

$NUM = "1.08"

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

2个回答

1

看起来有趣的行总是第三行。那么你可以使用这个awk一行命令:

awk 'NR==3{gsub(/[^.0-9]+/,"");$0+=0.01;print}' file.js
  • 这一行的重点在于第三行,并且需要取得版本号,将其加上0.01
  • 假设你的版本格式总是x.xx。如果不是这种情况,也可以动态计算增量,例如0.01或0.00001,但需要额外实现。
  • 如果你使用示例文件运行它,它将给出1.09

1
另一种方式:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接