Linux:查找并增加版本



如何从文件中获取版本号并用1增加版本?我想将版本存储到一个变量中,增加一个变量。将新版本保存在文件中。

假设我有一个简单的配置文件(application.config(,如下所示:

[section1]
Some = variables
[Version]
version = 1.0

版本总是以"version="开头(没有引号,我添加它们是为了演示=后面的空格(。我想:

  • 将1.0更改为1.1(1.9应为1.10,1.99应为1.100等(
  • 将1.1存储到一个变量中,以便在我的脚本的另一部分中使用它

我试过用sed:

sed -i -r 's/version = [0-9]+.[0-9]+/version = $Version/I' application.config

如果我手动输入$version,这是有效的,我如何从文件本身获得它?

version=$(sed -nE 's/version = ([0-9]+.[0-9]+)/1/Ip' application.config)
lastnumber=$((${version##*.}+1))
newversion=${version%.*}.$lastnumber
sed -i -E "s/version = [0-9]+.[0-9]+/version = $newversion/I" application.config

请注意,我已在您的sed中将-r更改为-E。它们是等效的,但后者被其他sed实现所理解。

这可能会对您有所帮助:

grep "version = [0-9]*.[0-9]*" <filename> | awk -F '.' '{print $1 "." 1+$2}'
grep -E "version = [0-9]+.[0-9]+" <filename> | awk -F '.' '{print $1 "." 1+$2}'

首先搜索单词"version",然后根据点分隔符将行一分为二,并在第二部分添加"1"。

备注:需要-E才能使加号工作。

只是为了展示您应该避免的另一种方式,因为它难以辨认且难以管理。既然知道前缀,就可以使用grep的perlregexp引擎提取整个版本,然后用逗号替换点,bash将在逗号后面添加数字,而不在其他变量中提取数字。

sed -E -i "s/.[[:digit:]]+/.$(($(grep -Po "(?<=versions=s)d+.d+$" conf.ini | sed "s/./,/g")+1))/g" conf.ini

最新更新