grep -Bオプション|一致行の前の行も表示する使い方を初心者向けにわかりやすく解説!
生徒
「Linuxのgrepコマンドで検索したい行の前に、どんな内容が書かれていたかも確認したいんですが、できますか?」
先生
「もちろんできますよ!-Bオプションを使えば、一致した行の前の行も一緒に表示できます。」
生徒
「エラーの直前のログとかも見たいときに便利そうですね!」
先生
「そうですね。それでは、grep -Bオプションの基本から見ていきましょう。」
1. grepコマンドとは?
grep(グレップ)コマンドは、Linuxでテキストファイルから特定のキーワードを含む行を探すための基本的なコマンドです。
たとえば、「error」という文字を含む行を表示するには、次のように実行します:
grep error logfile.txt
ただし、この方法では「error」という単語を含む行しか表示されません。前後の文脈も一緒に確認したい場合は、-Aや-Bオプションを使います。
2. -Bオプションとは?一致行の前を表示する方法
-BはBefore(前)の略で、検索に一致した行の前にある指定行数分も表示することができるオプションです。
使い方はとても簡単です:
grep -B 行数 検索文字列 ファイル名
たとえば、「ERROR」が書かれた行の直前2行も一緒に表示したい場合は、次のようにします:
grep -B 2 ERROR logfile.txt
3. grep -Bオプションの実例で学ぶ
次のようなlogfile.txtがあったとします:
cat logfile.txt
INFO: 起動準備完了
INFO: データベース接続中
INFO: 接続成功
ERROR: 認証サーバーエラー
INFO: リトライ開始
INFO: 完了
この中から「ERROR」が含まれる行と、その前の2行も見たい場合は、次のように実行します:
grep -B 2 ERROR logfile.txt
INFO: データベース接続中
INFO: 接続成功
ERROR: 認証サーバーエラー
このように、直前の流れを追って状況を把握できるので、エラーの原因を調べるときに非常に役立ちます。
4. 一致が複数あった場合の挙動と「--」の意味
-Bを使っていて、検索対象の文字列がファイル内に複数ある場合、それぞれの一致ブロックの間に--という区切りが表示されます。
grep -B 1 ERROR logfile.txt
INFO: 接続成功
ERROR: 認証サーバーエラー
--
INFO: リトライ開始
ERROR: 認証失敗
この「--」があることで、どこからどこまでが1セットの結果かを簡単に見分けることができます。
5. -Bと-Aや-Cの違いを知っておこう
grepコマンドには、似たようなオプションとして-Aと-Cがあります。
- -A 数字:一致行の後ろの行も表示(After)
- -B 数字:一致行の前の行も表示(Before)
- -C 数字:一致行の前後両方を表示(Context)
たとえば、前後1行ずつ表示したい場合は:
grep -C 1 ERROR logfile.txt
このように、表示したい範囲によってオプションを使い分けましょう。
6. 応用例:grep -Bで複数行の前の状況をチェックする
ログファイルや設定ファイルの内容を調査する際には、検索にヒットした行の前の情報がとても重要なヒントになることがあります。
以下のようなログがあったとします:
cat system.log
INFO: サービスA起動
INFO: サービスB起動
WARNING: メモリ使用率高
INFO: サービスC起動
ERROR: サービスCクラッシュ
INFO: 自動復旧開始
この中でERRORの前に何が起きていたか確認したいとき:
grep -B 3 ERROR system.log
INFO: サービスB起動
WARNING: メモリ使用率高
INFO: サービスC起動
ERROR: サービスCクラッシュ
このように、エラーの直前の出来事を把握することで、トラブルの原因分析がしやすくなります。