sedを使用してパターンの後の次の行を編集するには?

sedを使用してパターンの後の次の行を編集するには?

sed終わる行を検索しfooた後で始まる次の行を編集するにはどうすればよいですか#bar

つまり、#次の行がで始まり、前の行がで終わる場合は、次の行#barのコメントを削除したいと思います。foo

たとえば、

This is a line ending in foo
#bar is commented out
There are many lines ending in foo
#bar commented out again

私は試した:

sed -i 's/^foo\n#bar/foo\nbar/' infile

ベストアンサー1

sed '/foo$/{n;s/^#bar/bar/;}'

お客様のリクエストを文字通り翻訳したものです。nですnext

これで、次のような場合は機能しません。

line1 foo
#bar line2 foo
#bar

または:

line1 foo
line2 foo
#bar

nパターン空間にドラッグした線は検索されないためですfoo

次の行をパターン空間にインポートしてから、最初に再度繰り返すことでこの問題を解決できます。

sed '
  :1
  /foo$/ {
     n
     s/^#bar/bar/
     b1
  }'

おすすめ記事