如何使用旧版本中不存在的行更新配置文件?
示例:
config.cfg:
parameterA=0
parameterB=1
parameterC=0config.cfg.sample:
parameterA=0
parameterB=0
parameterC=0
parameterD=0我想要做的是使用config.cfg.sample文件执行更新config.cfg文件的命令,并获取以下结果:
parameterA=0
parameterB=1
parameterC=0
parameterD=0新行并不总是在末尾。不能更改现有行。
例如:
update_config.sh config.cfg config.cfg.sample谢谢!
发布于 2017-02-13 18:03:13
这个连接不需要任何循环。有一个用于此目的的工具,称为join。此命令将为您带来所需的结果。
join -a1 -a2 -t= b.txt bb.txt |cut -d= -f1-2如果去掉末尾的剪裁,你将能够看到两个文件之间的“比较”。
测试:
$ cat b.txt
parameterA=0
parameterB=1
parameterC=0
$ cat bb.txt
parameterA=0
parameterB=0
parameterC=0
parameterD=0
$ join -a1 -a2 -t= b.txt bb.txt |cut -d= -f1-2
parameterA=0
parameterB=1
parameterC=0
parameterD=0发布于 2017-02-13 17:25:50
这应该可以完成工作。"config.cfg“是原始文件,而"config.new”是要从中获取新关键字的文件。
#!/bin/sh
exec 0<config.new
while read line; do
parname=$(echo "$line" |cut -d= -f1)
# echo " (debug) new parname=$parname"
grep "^$parname" config.cfg || echo $line >> config.cfg
done基本原理是:逐行读取config.new;提取参数名称(通过cut),确定此参数名称是否包含在原始文件中,如果不包含,则将其附加到文件中。
不过,新参数将始终附加到原始文件中。如果需要的话,通过sort传递最终的文件可能会有所帮助。
附注:也许甚至可以避免使用cut命令,因为shell可以执行这种字段提取。我选择让事情变得简单。
https://stackoverflow.com/questions/42200277
复制相似问题