在 CentOS 中比较并合并配置文件

在 CentOS 中比较并合并配置文件

我试图通过 cron 将自动更新(针对多个服务器)bash 脚本设置为配置文件(基于文本),方法是每天下载新文件并直接替换它。该脚本工作正常,但是有时每个服务器都需要具有与主配置文件不同的特定设置,例如,标准配置行之一是:

port_defined=1,2,3

同时一些服务器需要:

port_defined=1,2,3,4,5,6

我可以手动更改相应服务器上的配置行,但是每次运行自动更新脚本时它都会被再次覆盖。

所以问题是,我可以制作一个 bash 脚本来下载参考配置文件,然后首先将其与本地配置文件(在相应服务器上)进行比较是否有任何差异,然后合并它?

通过“合并”,我的意思是将该行正确地组合成:

port_defined=1,2,3,4,5,6

而不是两条单独的线:

port_defined=1,2,3
port_defined=1,2,3,4,5,6

答案1

您真的要合并值列表吗?那是

port_defined=1,3,5
port_defined=2,4,123

应合并为

port_defined=1,2,3,4,5,123

如果是这样,你可以尝试

BEGIN { FS = "=" }
NR == FNR && /ports_defined/ { ports=$2 }
NR > FNR {
    if ($1 == "ports_defined") {
        ports = ports "," $2
        split(ports, p, ",")
        for (i in p) {
            if (!num[p[i]]) {
                result = result "," p[i]
                num[p[i]] = 1
            }
        }
        print $1 "=" substr(result, 2)
    } else {
        print
    }
}

相关内容