我有一个version.properties文件,如下所示:
#some comments
major=2
minor=16
patch=4
我想将次要值增加1。因此新值应为16 +1 = 17。 因此,更新后的文件将是:
#some comments
major=2
minor=17
patch=4
是否可以通过bash脚本实现这一目标?
预先感谢
答案 0 :(得分:4)
您可以使用awk:
awk -F"=" 'BEGIN{OFS=FS} $1=="minor"{$2=$2+1}1' versions.properties
此awk
脚本说:
-F"="
)OFS
等于输入字段分隔符FS
(BEGIN{OFS=FS}
)$1=="minor"
){$2=$2+1}
)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
注意:文件中的密钥必须唯一。