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

ファイルを更新するには-i、sed のオプションを使用します。

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

からman sed:

- i[SUFFIX] , --インプレース[=SUFFIX]

その場でファイルを編集します (SUFFIX が指定されている場合はバックアップを作成します)

だからあなたもできる

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