如何从文件中获取版本号并用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