使用shell脚本修改ini文件

pis*_*tal 5 shell ini

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

[test]
foo=bar
Run Code Online (Sandbox Code Playgroud)

如果我们将此ini文件称为test1.ini

如何更改的值foo,以foobarbaz例如使用shell script

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

sed "/^foo=/s/=.*/=foobarbaz/" < test1.ini
Run Code Online (Sandbox Code Playgroud)

你有什么其他的建议

fed*_*qui 6

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

sed -i "/^foo=/s/=.*/=foobarbaz/" test1.ini
Run Code Online (Sandbox Code Playgroud)

来自man sed

- i[SUFFIX] , --就地[=SUFFIX]

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

所以你也可以这样做

sed -i.bak "/^foo=/s/=.*/=foobarbaz/" test1.ini
Run Code Online (Sandbox Code Playgroud)


Syl*_*oux 5

我个人使用了更详尽的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
Run Code Online (Sandbox Code Playgroud)

作为安全网,我要补充:

sh$ diff test1.ini{,.bak}
2c2
< foo = foobarbaz
---
> foo=bar
Run Code Online (Sandbox Code Playgroud)