简单的 Linux 命令行命令来修改类似 INI 的配置文件中的选项

问题描述 投票:0回答:4

我正在寻找一个通用的命令行解决方案,它允许我在配置文件(类似 INI 的格式)内添加或修改配置选项。

大多数 Linux 配置文件使用类似 INI 的格式,带有

#
;
作为注释,并带有
option=value

我主要是在寻找需要文件名、选项和值的东西,并且这将更改配置以匹配此。

我想用它来编写一些自动部署脚本。我对使用 Debian 或 Ubuntu 上默认未安装的工具没有问题,只要它们确实存在于默认发行版存储库中(因为如果需要,我可以做一个

apt-get install xxx
)。

示例:

change-config /etc/default/nginx ULIMIT '"-n 4096"'

预期的结果是在 nginx 文件中包含

ULIMIT="-n 4096"
。显然,如果它已经存在并且具有相同的值,则它不应该执行任何操作。如果存在,注释旧行并添加新行就可以了。

请注意,这些配置文件在参数之间可以有空格/制表符,因此如果您有

ULIMIT =   "..."
仍然是相同的命令。这就是为什么我一直在寻找比
sed
更好的东西,因为有很多极端情况需要评估。

另外,我不想重新发明轮子,我怀疑我是第一个寻找此类问题解决方案的人。

linux shell automation configuration-files
4个回答
22
投票

git config
实际上是一个半通用的INI接口。

❱ git config --file=/etc/default/nginx somegroup.ULIMIT '-n 4096'
❱ cat /etc/default/nginx
[somegroup]
    ULIMIT = -n 4096
❱ git config --file=/etc/default/nginx somegroup.ULIMIT
"-n 4096"

但它不支持添加顶级密钥。所有键都必须放置在 INI 样式组中,即“somegroup”。多于。这使得它不适合你的任务,但我想我应该在这里提到它,以便其他人在这里找到方法。


8
投票

尝试克鲁迪尼。顺便说一句,我认为这个文件是一个 shell 文件而不是一个 ini 文件, 但crudini在这种情况下仍然可以工作:

crudini --set /etc/default/nginx '' ULIMIT '"-n 4096"'

2
投票

Augeas /

augtool
旨在做到这一点,尽管您需要适合您想要的文件类型的镜头(您也可以编写自己的镜头),例如,Nginx 镜头

如果需要,它还有一个 API。


0
投票

您可以使用

python
执行该操作,如相关问题 使用 ConfigParser Python 更改 ini 文件中的值。

虽然

python
已经安装在几乎每个 Linux 发行版中,所以你不需要额外的工具:-)。

© www.soinside.com 2019 - 2024. All rights reserved.