2013-10-24 106 views
3

我有一個ini文件與此類似修改INI文件

[test] 
foo=bar 

,如果我們把這個ini文件test1.ini

如何使用foo值更改爲foobarbaz例如shell script

我已經嘗試了以下,它不適合我。我在ini文件中看不到更新的更改。我怎麼寫它?

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

你有任何其他建議

+0

假設你的意思是你想'foo = foobarbaz'而不是'foobarbaz = bar',你的代碼在Windows,mingw(MSYS),bash下工作。引用是依賴於shell的;嘗試在'sed'字符串周圍使用單引號(''')而不是雙引號('「')。 – cxw

+0

使用'-i'選項''sed -i」/^foo=/s/=.*/= foobarbaz /「test1.ini'(注意重定向'<'已經從命令中刪除)。 – devnull

回答

4

有文件更新,使用-i選項的sed:

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

man sed

- 我[ SUFFIX], - in-place [= SUFFIX]在地方

編輯的文件(讓備份,如果提供的後綴)

所以,你也可以做

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

我個人使用一個更加完備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