用于合并属性文件 (sed/awk/comm/diff) 以进行 rpm 升级的 Shell 脚本

用于合并属性文件 (sed/awk/comm/diff) 以进行 rpm 升级的 Shell 脚本

我们正在开发一个通过 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

有没有办法以仅将新密钥添加到原始文件的方式合并这些文件?

我的想法是:

  1. 过滤键
  2. 对键进行排序
  3. 使用 comm(1),例如: comm -23 file.rpmnew.keys file.keys > new.keys
  4. 从 file.rpmnew 中提取 key=value 匹配的 new.keys
  5. 将结果附加到原始文件

我们如何通过 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
    

这就是基本的想法。它需要大量的错误处理、干净的临时文件创建和整理。

相关内容