我有2个配置文件(.ini),我想将新添加的行从配置文件1升级到配置文件2。我不想修改或删除行。
为此,我使用以下命令。但是它们也给了我修改/删除的行。
diff -u conf2 conf1|grep -E ^\+ >temp
patch -u -o conf2 -i temp
如果我安装了git client,我可以使用以下命令解决此问题。
git diff --diff-filter=a conf2 conf1|grep -E ^\+ >temp
patch -o conf2 -i temp
您能否帮助仅获取新添加的行并将其修补为完全相同的行号,而无需使用任何第三方工具。我也不想修补已修改或删除的行。
这是示例配置文件。
conf1
# app1 configuration
[app1]
username=root
ssh_port=22
http_port=8080
sd_port=8005
conf2
# app1 configuration
[app1]
username=admin
ssh_port=22
http_port=8080
现在,我只需要修补sd_port参数。不是更改的用户名。
谢谢。
答案 0 :(得分:1)
awk可以做到这一点。与
/ * diff.awk * /
BEGIN {FS="="}
FILENAME==ARGV[1] && $1 !~ /^[#\[]/ {
a[$1]=$2
}
FILENAME==ARGV[2] {
b[$1]=$2
}
END {
for(i in b) {
for(j in a) {
if(!b[j]) {
c[j]=a[j]
}
}
c[i]=b[i]
}
for(k in c) {
print k"="c[k]
}
}
运行
awk -f diff.awk conf1 conf2
应该给您
sd_port=8005
ssh_port=22
http_port=8080
username=admin