Dan*_*iga 5 scripting diff configuration patch text-processing
我想制作一个更新配置文件的 shell 脚本。
服务器上的文件包含信息,例如各种 IP 地址。
新文件有更多代码,从添加到系统的新配置开始,我希望能够将这些新配置添加到服务器文件中,而无需更改那里已经配置的内容
例子:
服务器文件
[config]
ip=127.0.0.1
port=22
Run Code Online (Sandbox Code Playgroud)
新文件
[config]
ip=XXX.XXX.XXX.XXX
port=XX
user=root
Run Code Online (Sandbox Code Playgroud)
我希望生成的文件是
[config]
ip=127.0.0.1
port=22
user=root
Run Code Online (Sandbox Code Playgroud)
怎么会是一个好方法呢?我不想依赖行位置等,因为实际的配置文件非常大,并且可以将更多行添加到服务器文件中。
我试图对文件进行差异化并应用补丁,但没有奏效。
谢谢你的帮助。
正如吉尔斯所说,您需要使用一种了解配置文件格式的工具。对于您的特定示例,您可以使用使用内置ConfigParser模块的简短 Python 脚本。
首先,假设您在服务器上的原始配置文件是original.cfg
:
[config]
ip=127.0.0.1
port=22
Run Code Online (Sandbox Code Playgroud)现在将您的更改放在一个名为的新文件中update.cfg
:
[config]
user=root
Run Code Online (Sandbox Code Playgroud)
此文件应在您希望它们放置的部分标题下列出新的或更改的条目。
然后运行一个这样的脚本:
#!/usr/bin/env python
import ConfigParser
config = ConfigParser.ConfigParser()
# Read the original config file
with open('original.cfg', 'r') as f:
config.readfp(f)
# Also read in all the changes we'd like to make
with open('update.cfg', 'r') as f:
config.readfp(f)
# Write the full new config file out
with open('output.cfg', 'w') as f:
config.write(f)
Run Code Online (Sandbox Code Playgroud)当然,如何做到这一点有很多变化。例如,配置更改可以直接编码到 Python 脚本中,而不是从单独的update.cfg
文件中读取。不过,这应该为您提供一个良好的入门基础。