入力について考えてみましょう。
=sec1=
some-line
some-other-line
foo
bar=baz
=sec2=
c=baz
= sec1 =のみを処理したい場合は、たとえば、次の方法でセクションをコメントアウトできます。
sed -e '/=sec1=/,/=[a-z]*=/s:^:#:' < input
... よくほとんど。
これにより、 「=sec1="」と「=sec2=」の行を含む行がコメント化され、結果は次のようになります。
#=sec1=
#some-line
#some-other-line
#
#foo
#bar=baz
#
#=sec2=
c=baz
私の質問は次のとおりです。sedの/START/、/ END /範囲から開始行と終了行を除外する最も簡単な方法は何ですか?
多くの場合、「s :::」の爪を改良することでこの特定のケースで解決策が得られることを私は知っていますが、私はここで一般的な解決策を求めています。
「Sed-はじめにとチュートリアル」で、ブルース・バーネットは次のように書いています。「コマンドを制限する方法を後で説明しますが、指定されたパターンを含む行は含まれません。」しかし、彼が実際に表示する場所を見つけることができませんでした。これ。
EricPementが編集した「USEFULONE-LINESCRIPTS FOR SED 」では、包括的な例しか見つかりませんでした。
# print section of file between two regular expressions (inclusive)
sed -n '/Iowa/,/Montana/p' # case sensitive