Grep: 上の2行目のみ表示

Grep: 上の2行目のみ表示

次のような内容のテキスト ファイルがあるとします。

foo
bar
whatever

something I don't know
bar2
whatever

grep whatever myfile.txtそして、 (および/またはsedおよび/または)を実行した結果の出力としてawk、次のものが欲しいです。

foo
something I don't know

オプションを使用しようとしましたが、と-B 2の両方が出力されます。さまざまなレコードが多数あるため、 実行できません。foobar
... | grep -v bar

答え1

grep ではありませんが、動作するはずです:

awk '/grep_string/ {print a} {a=b;b=$0}' ファイル

答え2

方法が見つからなかったので、私の解決策は次のとおりです。

コンテンツのブロックが返されたので、次のように言います。

foo
bar
whatever
--
foo2
bar2
whatever
--

など、grep の区切り文字を使用して、次の行を次のように取得し、削除しました。

grep -B2 whatever myfile.txt | grep -v whatever | grep -A 1 -E '\-\-' | grep -v  -E '\-\-'

そして、出力は次のようになります:

foo
foo2

関連情報