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

时间:2014-04-03 10:22:13

标签: linux shell automation configuration-files

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

大多数linux配置文件使用类似INI的格式,#和;作为评论和选项=值。

主要是我正在寻找带有文件名,选项和值的东西,这会改变配置以匹配它。

我想用它来编写一些自动部署脚本。我没有使用默认安装在Debian或Ubuntu上的工具,只要它们存在于默认的分发存储库中(因为我可以执行apt-get install xxx,如果需要的话)。

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

预期的结果是在nginx文件中有ULIMIT="-n 4096"。显然,如果它已经存在且具有相同的值,它就什么都不做。如果它存在,则评论旧行可以正常并添加新行。

注意,这些配置文件可以在参数之间包含空格/制表符,因此如果ULIMIT = "..."仍然是相同的命令。这就是为什么我正在寻找比sed更好的东西,因为有很多角落要评估。

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

3 个答案:

答案 0 :(得分:11)

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。"以上。这使得它不适合你的任务,但我想我在这里提到它,以便其他人在这里找到他们的方式。

答案 1 :(得分:5)

尝试crudini。 BTW我认为这个文件是shell文件而不是ini文件, 但在这种情况下,crudini仍然可以工作:

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

答案 2 :(得分:2)

Augeas / augtool的目的是做到这一点,尽管您需要使用正确的镜头来处理您所追求的文件类型(您也可以编写自己的文件),例如Nginx lens。< / p>

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