検索をかけてマッチした行だけでなく、直前の行も同時に表示させたい場合の紹介です。
直後の行を表示したい場合は下記を参考にして頂ければと思います。
[Linux]grep実行時索された直後の行も同時に表示する方法

スポンサーリンク

grepの-Bオプションで同時表示する前の行数を指定

下記のように、-Bオプションで同時表示する前の行数を指定します。

grep -B 行数 検索文字列 検索対象文字列

サンプルコード

例えば、下記のようにin.txtがあったとします。

 $ cat in.txt 
lineBefore1
lineBefore2
lineBefore3
lineBefore4
kensakutarget
lineAfter1
lineAfter2
lineAfter3
lineAfter4 

文字列kensakuをキーワードに検索して、マッチした行とマッチした行の直前の2行を同時に表示したい場合には、下記のようにコマンドを実行します。

 $ grep -B 2 "kensaku" in.txt 

実行すると、文字列kensakuを含む行と、直前の2行が表示されているのが確認できます。

 $ grep -B 2 "kensaku" in.txt 
lineBefore3
lineBefore4
kensakutarget

スポンサーリンク

grepで直前の行も同時表示するユースケース

例えば、関数の呼び出し元を検索したい場合などは、直前の行も表示することで、呼び出し方をある程度把握できる場合があるかと思います。
あとは、関数定義の前に関数の説明をコメントしている場合は、それらを確認するのにも便利です。
もちろん使い方は人それぞれあると思いますので、あくまでご参考ということでよろしくお願いします。

カレントディレクトリ以下を再帰的にgrepする場合

grepを使う時は、再帰的にあるディレクトリ以下全体を検索する場合もあると思います。
その場合は例えば下記のように、-rオプションでカレントディレクトリを指定することもできます。
カレントディレクトリ以下を再帰的に検索して、"kensaku"とマッチした行と、マッチした直前の2行を同時表示する書き方になります。
この使い方も便利なので重宝しています。

 $ grep -r -B 2 "kensaku" .

スポンサーリンク