我有一个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)
你有什么其他的建议
要更新文件,请使用-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)
我个人使用了更详尽的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)