如何在属性文件中增加数值

时间:2018-06-20 14:23:38

标签: bash shell

我有一个version.properties文件,如下所示:

#some comments
major=2
minor=16
patch=4

我想将次要值增加1。因此新值应为16 +1 = 17。 因此,更新后的文件将是:

#some comments
major=2
minor=17
patch=4

是否可以通过bash脚本实现这一目标?

预先感谢

3 个答案:

答案 0 :(得分:4)

您可以使用awk:

awk -F"=" 'BEGIN{OFS=FS} $1=="minor"{$2=$2+1}1' versions.properties

awk脚本说:

  1. 将每个记录以等号(-F"="
  2. 确保输出字段分隔符OFS等于输入字段分隔符FSBEGIN{OFS=FS}
  3. 如果第一个字段是单词“次要”($1=="minor"
  4. 然后将1添加到第二个字段({$2=$2+1}
  5. 最后将记录打印出1

您可以将其重定向到一个临时文件,然后将其转换回原始文件的顶部:

 awk -F"=" 'BEGIN{OFS=FS} $1=="minor"{$2=$2+1}1' versions.properties > versions.properties.tmp && mv versions.properties.tmp versions.properties

答案 1 :(得分:1)

您还可以使用此:

// this runs on a background pool thread
void DoWork(object sender, args)
{
    var worker = sender as Backgroundworker;
    var Numbers = args.Argument as IEnumerable<SomeThing>;
    int percentage = 0;    

    foreach (var number in Numbers)
    {
        //Send a Message here
        worker.ReportProgress(percentage, number);

        // other processing on number, just don't use the UI
    }
}

它可以解决此问题,而无需使用其他重定向和mv命令。希望这会有所帮助:-)

答案 2 :(得分:0)

步骤:

1-获取参数的行号(用于替换)

grep -n "minor" version.properties | cut -d: -f1

根据您的version.properties文件,它显示为“ 3”

我们将其保存在变量中

line=$(grep -n "minor" version.properties | cut -d: -f1)

2-获取键=值

grep -n "minor" version.properties | cut -d: -f2

这会根据您的version.properties文件显示minor = 16

我们将其保存在名为 string 的变量中:

string=$(grep -n "minor" version.properties | cut -d: -f2)

3-获取此字符串的版本:minor = 16

version=$(echo $string | cut -d= -f2)

4-增加版本

newVersion=$(( version + 1))

5-使用行号替换原始属性文件:

sed -i "$line c $key=$newVersion" version.properties

最后这是一个完整的脚本,其中包含密钥和文件作为参数,因此您可以使用它来增加任何属性文件中的任何密钥,例如在任何位置:

key=$1
file=$2

line=$(grep -n "$key" $file | cut -d: -f1)
string=$(grep -n "$key" $file | cut -d: -f2)

# get version from string
version=$(echo $string | cut -d= -f2)

#increase version
newVersion=$(( version + 1))

#update file
sed -i "$line c $key=$newVersion" $file

用法:

bash update_version.sh "patch" /server/files/version.properties

注意:文件中的密钥必须唯一。