8

我有一个ini类似的文件

[test]
foo=bar

如果我们称这个ini文件为test1.ini

例如,如何foo使用.foobarbazshell script

我已经尝试了以下方法,但它对我不起作用。我没有在 ini 文件中看到更新的更改。我该怎么写?

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

你有什么其他的建议

4

2 回答 2

9

我个人使用更详细的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
于 2015-02-09T12:23:43.807 回答
7

要更新文件,请使用-ised 选项:

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

来自man sed

- i[后缀] , --就地[=后缀]

就地编辑文件(如果提供了 SUFFIX,则进行备份)

所以你也可以做

sed -i.bak "/^foo=/s/=.*/=foobarbaz/" test1.ini
于 2013-10-24T13:32:42.037 回答