2013-10-24 4 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', ваш код работал для меня под виндой, MinGW (MSYS), Баш. Котировка зависит от оболочки; попробуйте использовать одинарные кавычки ('' ') вокруг строки' sed', а не двойные кавычки ('' '). – cxw

+0

Используйте опцию' -i'. 'sed -i" /^foo=/s/=.*/= foobarbaz/"test1.ini" (обратите внимание, что перенаправление '<' было удалено из команды). – devnull

ответ

4

Чтобы обновили файл, используйте -i вариант СЭД:

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

От man sed:

- я [ SUFFIX], - на месте [= SUFFIX]

редактировать файлы на месте (делает резервную копию, если 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 
Смежные вопросы