gpt4 book ai didi

linux - 比较两个环境属性文件,只将新文件中添加的属性迁移到旧文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:00:48 24 4
gpt4 key购买 nike

你好,这是我要完成的设置

  • 用户在他们的机器上有一个环境属性文件,它有一个包含大约 300 个属性的列表。

  • 然后,我们将新版本部署到同一系统,并使用该文件的更新版本添加更多属性。我不想删除旧的 env prop 文件,我只想添加这些新属性而无需用户这样做。例子

文件 A(新环境属性文件)

DB_CONNECTION=

DB_REPO=

数据库测试=

DB_USER=

文件 B(旧环境属性)

DB_REPO=

DB_USER=

我只需要将 DB_CONNECTION 和 DB_TEST 添加到该文件,可能还有更多要添加,这只是一个示例。

我尝试了多个 grep 和 diff 命令,但它们只是输出屏幕或替换整个文件。我不想这样做,因为用户已经保存了值,所以我只需要添加新属性。

提前致谢

最佳答案

我建议在其自己的子 shell 中获取每个文件,执行 set 以显示完整的环境变量集,并比较两个输出。听起来很复杂,但很容易输入:

diff <(source a.sh; set) <(source b.sh; set)

输出是一个典型的diff输出,在我的例子中:

19d18
< DB_CONNECTION=
21d19
< DB_TEST=
87c85
< _=a.sh
---
> _=b.sh

最后两行(_=a.sh_=b.sh)没什么意思;他们只显示最后使用的参数(当然不同)。

现在,要将找到的内容添加到您要修补的文件中,您可以使用:

diff  <(source a.sh; set) <(source b.sh; set) | grep '^<' | cut -c3- | grep -v '^_=' >> b.sh

不过,此解决方案不考虑更改的值。如果用户在他的旧配置文件中更改了一个值,新配置文件将再次具有标准值,这将是一个差异,因此它将被添加到旧配置文件中。

您可能不希望这样,因此您可能希望对如何处理更改的值指定进一步的要求。

关于linux - 比较两个环境属性文件,只将新文件中添加的属性迁移到旧文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20354165/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com