一致する行の内容を除いて、grep -Cまたは-Aまたは-Bを組み合わせることはできますか?

一致する行の内容を除いて、grep -Cまたは-Aまたは-Bを組み合わせることはできますか?

したがって、grepを使用すると、-Aを使用して「以降」に一致する行を取得でき、-Bを使用して「前」に一致する行を取得できます。 -C を使用して前後の行を取得することもできます。

このようなデータがあります。

boring data
boring data
boring data
interesting value
MARK
boring data
boring data
boring data
interesting value
MARK

次のような出力を得たいと思います。

interesting value
interesting value

-BIオプションを使用すると、次のようになります。

# cat somefile | grep -B 1 MARK

interesting value
MARK
interesting value
MARK

MARKラインを完全に除外したいです。

答え1

grep-v最初のものの後に駅を追加できますgrep

$ grep -B1 --no-group-separator 'MARK' somefile | grep -v 'MARK'
interesting value
interesting value

--no-group-separator一致の間に区切り文字を省略する機能を追加しました。

答え2

使い方が不便な場合は、grepawkなどの他のツールを使用できます。

awk '/MARK/ { print saved_line }
     { saved_line=$0 }'

ラインが一致すると、保存されたラインを印刷し、必要な場合に備えて各ラインに保存することを意味します。

関連情報