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=数字 | マッチした行の前の行を表示する |
\第一線のプログラマーの行動原理を学べる!/
