grepはマッチした行だけを表示する。ログの調査などでは前後の行も見たい場合がある。前後の行を一緒に表示するには-C、後ろだけなら-A、前だけなら-Bを指定する。

以下の例では次のファイルを使う。

$ cat test.txt
aaa
bbb
ccc
ddd
eee
fff
ggg

マッチした行の前後の行も表示する

-Cオプション(--context)を指定するとマッチした行の前後の行を表示する。

$ grep -C 2 ddd test.txt
bbb
ccc
ddd
eee
fff

-C 2を指定しているのでマッチしたdddの行の前後2行が表示される。

行数だけを-数字の形式で指定しても同じ結果になる。-Cの短縮形である。

$ grep -2 ddd test.txt
bbb
ccc
ddd
eee
fff

マッチした行とその後の行を表示する

-Aオプション(--after-context)を指定するとマッチした行の後の行を表示する。

$ grep -A 2 ddd test.txt
ddd
eee
fff

-A 2を指定しているのでマッチしたdddの行の後2行が表示される。

マッチした行とその前の行を表示する

-Bオプション(--before-context)を指定するとマッチした行の前の行を表示する。

$ grep -B 2 ddd test.txt
bbb
ccc
ddd

-B 2を指定しているのでマッチしたdddの行の前2行が表示される。

複数マッチしたときの区切り

1つのファイル内で複数の行にマッチすると、離れた箇所の間に--の区切り行が挿入される。

$ cat multi.txt
1
2
HIT
4
5
6
7
8
HIT
10
11

$ grep -C 1 HIT multi.txt
2
HIT
4
--
8
HIT
10

前後の行が重なるほど近い位置でマッチした場合は、区切りが入らず連続して表示される。

マッチした行と前後の行を区別する

前後の行も表示すると、どの行がマッチした行なのか分かりにくい。-nオプションで行番号を表示すると区別できる。

$ grep -n -C 1 ddd test.txt
3-ccc
4:ddd
5-eee

マッチした行は行番号の後ろが:、前後の行は-になる。上記の例では4行目のdddがマッチした行である。

オプション一覧

オプション長い形式内容
-C 数字--context=数字マッチした行の前後の行を表示する
-数字なし-C 数字と同じ
-A 数字--after-context=数字マッチした行の後の行を表示する
-B 数字--before-context=数字マッチした行の前の行を表示する