使用shell脚本修改ini文件

4nkexdtk  于 6个月前  发布在  Shell
关注(0)|答案(3)|浏览(75)

我有一个类似于此的ini文件

[test]
foo=bar

字符串
如果我们把这个ini文件命名为test1.ini
如何将foo的值更改为foobarbaz,例如使用shell script
我已经尝试了以下方法,但它对我不起作用。我在ini文件中看不到更新的更改。我该如何编写它?

sed "/^foo=/s/=.*/=foobarbaz/" < test1.ini


你还有其他建议吗

0x6upsns

0x6upsns1#

我个人使用了一个更详细的sed命令,因为相同的选项可能会出现在几个不同的部分:

sh$ sed -i.bak '/^\[test]/,/^\[/{s/^foo[[:space:]]*=.*/foo = foobarbaz/}' test1.ini
#       ^^^^^^  ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#    make a       in the right         perform the substitution
#   *backup*       section                as you want

字符串
作为一个安全网,我想补充一下:

sh$ diff test1.ini{,.bak}
2c2
< foo = foobarbaz
---
> foo=bar

5ssjco0h

5ssjco0h2#

要更新文件,请使用sed的-i选项:

sed -i "/^foo=/s/=.*/=foobarbaz/" test1.ini

字符串
man sed
-i[SUFFIX],--就地[=SUFFIX]
就地编辑文件(如果提供SUFFIX,则进行备份)
所以你也可以

sed -i.bak "/^foo=/s/=.*/=foobarbaz/" test1.ini

uqxowvwt

uqxowvwt3#

克鲁迪尼

Crudini是.ini文件的命令行接口。

溶液

crudini --set test1.ini test foo foobarbaz

字符串
或者,更一般地说,
crudini--设置 * 文件名.INI* * 部分 * * 参数 * * 价值 *

详细信息

crudini由Pádraig Brady于2013年编写,自从这个问题首次被提出以来,crudini已经成为UNIX工具包中的标准解决方案。许多GNU/Linux发行版将crudini预打包为操作系统的一部分,使安装变得简单(例如apt install crudini)。它也适用于Apple MacOS和Microsoft Windows。
我过去也使用过自己定制的sed脚本,但crudini更简单,功能更强大,而且不太可能意外地破坏我的文件。
请参阅crudini homepage以了解更多详细信息。

危险

虽然crudini对大多数人来说比sed更安全,但它并不完美。

  • Crudini没有sed的-i~选项来在就地操作时自动创建备份文件。
  • 很容易删除整个部分。
  • crudini --set config.ini foo x=3将轻松地创建一行代码:x=3 =[据报道,这在最新版本中已得到修复。]
  • 它对列表(逗号分隔的值)的处理是幼稚的。

相关问题