我有一个具有以下内容的abc.toml文件:
[env]
APPLICATION_NAME = 'loy'
COMPONENT_NAME = 'web-loy'
AAAS_VERSION='0.0.2'
AAAS_FLAVOR='apache-base'
CONF_VERSION='0.0.1'
SERVICE_VERSION='0.0.2'
我想在shell中编写一个脚本,以便可以调用它并增加版本号。在CONF_VERSION中。 即,在调用脚本后,CONF_VERSION应该变为“ 0.0.2”,下次变为“ 0.0.3”,依此类推...
调用脚本一次后的预期输出为:
[env]
APPLICATION_NAME = 'loy'
COMPONENT_NAME = 'web-loy'
AAAS_VERSION='0.0.2'
AAAS_FLAVOR='apache-base'
CONF_VERSION='0.0.2'
SERVICE_VERSION='0.0.2'
答案 0 :(得分:1)
这将使CONF_VERSION
的最后一位递增
awk '/CONF_VERSION/ {split($2,a,".");++a[3];$0=$1FS a[1]"."a[2]"."a[3]FS}1' FS="'" file
[env]
APPLICATION_NAME = 'loy'
COMPONENT_NAME = 'web-loy'
AAAS_VERSION='0.0.2'
AAAS_FLAVOR='apache-base'
CONF_VERSION='0.0.2'
SERVICE_VERSION='0.0.2'
请注意,您不写0.0.9
之后应该发生的情况。该awk
给出了0.0.10
编辑:
awk '/CONF_VERSION/ {split($2,a,".");if (a[3]==9) {a[3]=0;++a[2]} else {++a[3]};$0=$1FS a[1]"."a[2]"."a[3]FS}1' FS="'" file
此版本将从0.0.9
更改为0.1.0
,而不是0.0.10
答案 1 :(得分:1)
这是另一个awk版本:
$ awk -F'[.]' '/CONF_VERSION=/{$3=($3+1)"\x27"} 1' OFS=. abc.toml
[env]
APPLICATION_NAME = 'loy'
COMPONENT_NAME = 'web-loy'
AAAS_VERSION='0.0.2'
AAAS_FLAVOR='apache-base'
CONF_VERSION='0.0.2'
SERVICE_VERSION='0.0.2'
-F'[.]'
这告诉awk使用.
作为输入的字段分隔符。
/CONF_VERSION=/{$3=($3+1)"\x27"}
这仅选择包含CONF_VERSION=
的行。对于这些行,第三个字段将增加1,并添加单引号。
\x27
表示单引号。这样表示是为了避免混淆外壳。
1
这告诉awk打印行。
OFS=.
这告诉awk使用句点作为输出的字段分隔符。
如果您有GNU awk(有时称为gawk),请使用:
gawk -i inplace -F'[.]' '/CONF_VERSION=/{$3=($3+1)"\x27"} 1' OFS=. abc.toml
无论awk版本如何,以下内容都会在适当的地方更新:
awk -F'[.]' '/CONF_VERSION=/{$3=($3+1)"\x27"} 1' OFS=. abc.toml >temp && mv temp abc.toml