回答:
「Word A
」と「Word D
」(包括的)の間の行を印刷したいようです。のsed
代わりに使用することをお勧めしますgrep
。必要なパターンで開始および終了する入力ストリームの範囲を編集できます。sed
範囲内のすべての行を印刷し、他の行は印刷しないように指示する必要があります。
sed -n -e '/Word A/,/Word D/ p' file
| sed -e '1d;$d'
最初の行と最後の行を削除するだけで追加します
sed -n -e '/pattern A/,/pattern D/d; p'
は、「パターンAからパターンDに削除して、他のすべてを印刷する」と言います。残念ながら、この試合は貪欲です。つまり、パターンAとDが複数回出現する場合、最初のパターンAから最後のパターンDに一致することになります。その場合、PerlまたはPythonがあなたの友達ではないかと思います。
なぜawkを使用しないのですか?
awk '/Word A/,/Word D/' filename
Word D
、と同じ行にWord A
ある場合、および場合によっては別の場所にある場合に優れています。たとえばWord A Word D\nWord D
、sedを使用すると、awkが1行を表示する2行が表示されます。さらにawkで変数を使用することもできます。たとえばawk -v _word="Word A" '$0 ~ _word,/Word D/' "/some/file"
、sedはより効率的かもしれませんが、同じ行にある場合もそうでない場合もある2つの文字列の検索を処理する場合、awkは確実に信頼性が高くなります。
A
とB
し、あなただけのような各配列との間に何をキャプチャしたいです。私の場合、少なくともsedはこれらのセマンティクスに従っていないようです。