特定の項目を検索し、次の項目のみを置き換えよ[7_addons]
うとしています。enabled=0
enabled=1
この例では、次のようになります。
sed -i -e 's#enabled=0#enabled=1#g' /etc/file.txt
enabled=0
..replaceに表示されているすべてのコンテンツですが、検索文字列の後に続くものだけを置き換えて、に置き換えて停止したいとfile.txt
思います。7_addons
=0
=1
答え1
enabled
最初の行以降に存在すると想定されるファイルの行を置き換えるには、ed![7_addons]
ed -s input <<< $'/^\[7_addons\]$\n/^enabled=0\nc\nenabled=1\n.\nw\nq' > /dev/null
外部から起動し、ファイルed
のスクリプトモードで実行され、input
ANSI引用符付き文字列をhere文字列に渡し、出力を/ dev / nullにリダイレクトします。 / dev / nullリダイレクトは、操作中に見つかった行のレポートを削除します。
ここの文字列は\n
- で区切られ、次のコマンドで区切られます。
/^\[7_addons\]$
- 行の[7_addons]
先頭(^
)と終わり()で正確に行を検索します。$
/^enabled=0$
-それから次の行を前方に検索します。enabled=0
c
- この行を変更してくださいenabled=1
——この記事の場合.
- 代替テキストの終わりw
--ディスクにファイルを書き込むq
——編集終了
この入力例では、次のようになります。
[1_addons]
enabled=0
foo=bar
[7_addons]
foo=baz
enabled=0
other=bat
[8_addons]
foo=quux
生成されたファイルは次のとおりです。
[1_addons]
enabled=0
foo=bar
[7_addons]
foo=baz
enabled=1
other=bat
[8_addons]
foo=quux
答え2
sed '/\[7_addons\]/{n;s/enabled=0/enabled=1/}'
[7_addons]
またはとの間に異なる行がある場合enabled=0
:
sed '/\[7_addons\]/,/enabled=/s/enabled=0/enabled=1/'
例:
$ cat foo
[2_foo]
enabled=0
[7_addons]
extra fluff
enabled=0
enabled=0
$ sed '/\[7_addons\]/,/enabled=/s/enabled=0/enabled=1/' foo
[2_foo]
enabled=0
[7_addons]
extra fluff
enabled=1
enabled=0
正規表現をより厳密にしたいと思うかもしれません。質問のデータに基づいてそれを行うことはできません。