我们正在开发一个通过 rpm 安装的 java 产品。我们有一组用户可以编辑的配置文件。这些配置文件是 java 属性文件,格式如下:
com.acme.pkg1.setting=something customized 1
com.acme.pkg2.setting=something original 2
这些文件在 SPEC 文件中用 %config(noreplace) 标记,因此升级后,我们可以在其旁边有一个 .rpmnew 文件:
com.acme.pkg1.setting=something original 1
com.acme.pkg2.setting=something original 2
com.acme.pkg3.setting=something original 3
有没有办法以仅将新密钥添加到原始文件的方式合并这些文件?
我的想法是:
- 过滤键
- 对键进行排序
- 使用 comm(1),例如: comm -23 file.rpmnew.keys file.keys > new.keys
- 从 file.rpmnew 中提取 key=value 匹配的 new.keys
- 将结果附加到原始文件
我们如何通过 rpm 更新后脚本实现这一切?
最好只使用标准的 Linux 实用程序(comm、diff、sed、awk、grep...)?
答案1
无需设置即可构建原始原始值和原始目标值:
sed "s/=.*//g" file_original.ini > file_original.raw sed "s/=.*//g" file_target.ini > file_target.raw
我认为目标将比原始目标有更多的选择。建立差异:
grep -vf original.raw target.raw > newvals.dat
添加新值:
cp -p file_original.ini file_original.ini.rpmsave grep -f newvals.dat file_target.ini >>file_original.ini
这就是基本的想法。它需要大量的错误处理、干净的临时文件创建和整理。