Linux

【簡単】grepコマンドの使い方と便利なオプションの紹介

(最終更新月:2023年4月)

✓当記事はこのような方に向けて書かれています

「grepコマンドの使い方について詳しく知りたい」
「ファイル内で特定のキーワードを検索したい」
「正規表現を使用してファイル内で特定の文字列を検索したい」

✓当記事では以下をお伝えします

  • grepコマンドとは何か
  • grepコマンドの基本的な使い方
  • grepコマンドのオプションや応用的な使い方

当記事では、grepコマンドの基本についてはもちろん、初心者にもわかりやすく検索キーワードの指定方法について詳しく解説しています。

ぜひ最後までご覧ください。

grepコマンドの使用例はこちらのショートムービーでもご覧いただけます。

grepコマンドで知っておくべき基礎知識

まずはgrepコマンドの基本について見ていきます。

grepコマンドについて、最低でも知っておきたい箇所をおさえましょう。

  • grepコマンドとは?
  • grepコマンドの基本構文
  • grepの活用例
  • 正規表現の使用方法
  • 複数ファイルの検索方法
  • 検索結果の出力方法

grepコマンドとは?

grep(Global Regular Expression Print)は、指定された正規表現にマッチする行をファイルから見つけ出し、出力するために使用されます。

grepコマンドを使う代表的な場面は以下のとおり。

  • ログファイルの解析
  • コードの解析
  • ファイルの検索

grepコマンドの基本構文

grepコマンドの基本的な構文は以下の通りです。

grep [オプション] パターン [ファイル名]

  • オプション:省略可能で、検索したい正規表現パターンを指定
  • ファイル名:検索対象のファイルの名前を指定

ファイル名を指定しなければ、標準入力からデータを読み込んで検索を実行します。

例えば、以下のコマンドは、itc.txtというファイルからhelloという文字列を含む行を検索し、その行を出力します。

grep "hello" itc.txt

ログファイルの解析

システムのログファイルは、システムの正常性や問題を解析するために非常に重要です。

grepコマンドを使用して、ログファイルから特定のエラーメッセージやイベントを検索し、問題の解決に役立てられます。

grep "error" /var/log/apache2/error.log

grepの活用例

grepはさまざまな場面で使えますが、以下のようなことに使われることが多いです。

  • コードの解析
  • ファイルの検索

コードの解析

grepコマンドは、コードの解析にも使えます

例えば、ある関数がどこで呼び出されているかを検索する場合、以下のようにコマンドを実行します。

$ grep -r "test_func" main.py
def test_func():

こちらはmain.pyというPythonファイル内を検索する例です。

ファイルの検索

特定のファイルを検索する場合、grepコマンドを使用できます。

例えば「itcdir」というフォルダ内で、.pyファイルを検索する方法は以下のとおり。

$ ls itcdir | grep ".py"
first.py
main.py
second.py
third.py

lsコマンドと組み合わせて使います。

正規表現の使用方法

grepコマンドでは、文字列を保存しているファイルから特定の文字列を検索できるもので、正規表現を使っても可能です。 

正規表現を使うことで、より精密な検索が可能になります。

複数ファイルの検索方法

grepコマンドで、複数のファイルの同時検索も可能です。

複数のファイルを指定するためには、ファイル名を空白で区切ってgrepコマンドに渡します

grepコマンドは、指定した複数のファイルを一度に検索し、マッチする行を表示してくれるのです。

検索結果の出力方法

grepコマンドの出力方法は、検索結果をターミナルに出力するものです。

マッチする行が何行あるかを数え、その数を表示するだけでなく、マッチした行そのものも表示します。

そして、ファイル名を検索の結果とともに出力することも可能です。

grepコマンドのオプション一覧

grepコマンドのオプションについて、具体的に見ていきます。

コマンドを使いこなせば、より精密な検索が可能となるでしょう。

  • -i:大文字・小文字を区別せずに検索
  • -r:再帰的にファイルを検索
  • -v:指定した文字列を含まない行を抽出
  • -E:拡張正規表現を使用
  • -w:単語単位で検索
  • -n:マッチした行の前に行番号を表示
  • -c:マッチした行数を表示
  • -o:マッチした文字列だけを表示
  • -A:マッチした行の後ろに指定した行数を表示
  • -B:マッチした行の前に指定した行数を表示
  • -C:マッチした行の前後に指定した行数を表示

-i:大文字・小文字を区別せずに検索

このオプションを使うと、大文字と小文字を区別せずに検索ができます。

-iオプションを付けることで、大文字小文字を問わずに検索可能になります。

grep -i "error" /var/log/apache2/error.log

-r:再帰的にファイルを検索

このオプションを使うと、ディレクトリ内のすべてのファイルを再帰的に検索することができます。

サブディレクトリに入っていても、そのすべてのファイルを検索対象とします。

$ grep -r "test_func" itcdir
itcdir/first.py:def test_func():
itcdir/main.py:def test_func():
itcdir/second.py:def test_func():
itcdir/third.py:def test_func():

-v:指定した文字列を含まない行を抽出

このオプションを使うと、指定した文字列が含まれていない行を検索することが可能です。

-vオプションを使用することで、マッチしない行を検索することができます。

$ grep -v "success" /var/log/apache2/error.log
[Sun Apr 02 02:25:46.052978 2023] [mpm_prefork:notice] [pid 1304] AH00163: Apache/2.4.41 (Ubuntu) configured -- resuming normal operations
[Sun Apr 02 02:25:46.053029 2023] [core:notice] [pid 1304] AH00094: Command line: '/usr/sbin/apache2'

-E:拡張正規表現を使用

grepコマンドの-Eオプションを使えば、検索するパターンをより柔軟に指定できます。

具体的には、以下のようなことが可能になります。

  • パイプ(|)で区切られた複数の検索パターンを一度に検索
  • 括弧を使ってグループ化
  • 特殊文字をエスケープ

例えば、次のようなコマンドを実行することで、ファイルの中から”python”または”javascript”が含まれる行を検索することができます。

grep -E 'python|javascript' itc.txt

-w:単語単位で検索

grepコマンドの-wオプションは、単語単位で検索をおこない、キーワードとして指定した単語が含まれる単語だけを検索できるもの。

具体的には、-wオプションを使わない場合だと、”grep test test.txt” とすると、testだけでなく、testcaseやtesterなど、testが含まれる部分もすべて検索されてしまいます。

しかし-wオプションを使えば、「test」という単語だけが検索されるのです。

$ cat test.txt
This is a test.
This is a tester.
This is a testcase.

$ grep -w test test.txt
This is a test.

-n:マッチした行の前に行番号を表示

grepコマンドの-nオプションは、検索結果の前に行番号を表示するオプション。

行番号を表示することで、検索結果がどの行にあるのかを把握しやすくなります。

grep -n “検索したい文字列” ファイル名

例えば10行目と20行目に「10st」という文字が含まれているファイルでは以下のようになります。

$ grep -n "10st" itc.txt
10:this is 10st sentence.
20:this is 10st sentence.

-c:マッチした行数を表示

grepコマンドの-cオプションは、検索語句がファイル内に出現する行数ではなく、出現回数をカウントするために使用されます。

ファイル内に出現する検索語句の総数をカウントするのです。

$ grep -c "sentence" itc.txt
27

複数のファイルの総数を取りたい場合は、ファイル間をスペースで区切ります。

$ grep -c "sentence" itc.txt itc2.txt
itc.txt:27
itc2.txt:3

-o:マッチした文字列だけを表示

grepコマンドの-oオプションは、指定されたパターンにマッチする部分だけを出力するもの。

$ grep -o "1st" itc.txt itc2.txt
itc.txt:1st
itc.txt:1st
itc.txt:1st
itc.txt:1st
itc.txt:1st
itc.txt:1st
itc.txt:1st

正確にマッチした部分だけ出力されます。

-A:マッチした行の後ろに指定した行数を表示

grepコマンドの-Aオプションを使えば、検索対象のファイル内でマッチする行とその後の行を、指定された数表示できます。

$ grep -A 5 "4st" itc.txt
this is 4st sentence.
this is 5st sentence.
this is 6st sentence.
this is 7st sentence.
this is 8st sentence.
this is 9st sentence.
--
this is 14st sentence.
this is 15st sentence.
this is 16st sentence.
this is 17st sentence.
this is 18st sentence.
this is 19st sentence.

-B:マッチした行の前に指定した行数を表示

grepコマンドの-Bオプションは、指定した単語が見つかる行とその前を指定した行数分表示します。

$ grep -B 3 "4st" itc.txt
this is 1st sentence.
this is 2st sentence.
this is 3st sentence.
this is 4st sentence.
--
this is 11st sentence.
this is 12st sentence.
this is 13st sentence.
this is 14st sentence.

-C:マッチした行の前後に指定した行数を表示

-Cオプションでは指定した単語が見つかるその前後の行を、指定した行数分表示します。

$ grep -C 3 "5st" itc.txt
this is 2st sentence.
this is 3st sentence.
this is 4st sentence.
this is 5st sentence.
this is 6st sentence.
this is 7st sentence.
this is 8st sentence.
--
this is 12st sentence.
this is 13st sentence.
this is 14st sentence.
this is 15st sentence.
this is 16st sentence.
this is 17st sentence.
this is 18st sentence.

まとめ:grepコマンドを使えば効率よく検索が可能

当記事の内容をまとめます。

  • grepコマンドとは、ファイルやファイル内の文字列を検索できるもの
  • grepコマンドを使えばログの解析やワード検索が簡単になる
  • grepコマンドのオプションを使うと、より精密な検索が可能

grepコマンドは少し複雑に見えるけど、実は簡単。

grepコマンドのオプションを使えば、さまざまなことが効率よくできます。

grepコマンドを使いこなして、PC内の作業をより早く、正確におこないましょう。