Linuxにおいて、ファイルの中から特定の文字列を検索したい場合に役立つのが、grepコマンドです。
今回の記事では、grepコマンドの詳しい使い方について解説していきたいと思います。
Linuxのgrepコマンドとは
grepコマンドは、テキストファイルやコマンドの出力結果から、特定の文字列やパターンに一致する行を抽出するコマンドです。
ログの解析や設定ファイルの確認、データ抽出など、様々な場面で活用される基本コマンドの1つです。
grepコマンドの基本構文は以下の通りです。
grep [オプション] 検索パターン ファイル名例えば以下のように、探したい文字列を指定して実行します。
$ grep "Hello World" sample.txt指定の文字列がファイル内にある場合、下記のように文字列を含む一行全体が出力されます。
Hello World! これはサンプルですLinux grepオプションを活用して検索を効率化する
grepコマンドは、オプションを組み合わせることで検索の精度や効率を向上させることができます。
使用可能なコマンドについて、順に確認していきましょう。
検索精度を高める基本オプション(-i, -n, -v)
まずは、使用頻度の高い基本的なオプションから紹介します。
【 -i:大文字・小文字を区別しない】
-i オプションを使用することで、大文字と小文字の区別を付けずに抽出できます。
$ grep -i "hello world" sample.txtHello World!【 -n:行番号を表示】
-n オプションを使用すると、ファイル内の何行目に位置するかを合わせて表示します。
$ grep -n "Hello World" sample.txt3:Hello World!【 -v:一致しない行を表示(除外検索)】
-v オプションを使用すると、指定の文字列を含まない行を抽出します。
$ grep -v "Hello World" sample.txt指定の文字列を含みません各オプションは単体のみでなく、複数を組み合わせて使用することもできます。
$ grep -in "hello world" sample.txt3:Hello World!複数ファイルやディレクトリを対象にする再帰検索(-r, -l)
複数のファイルやディレクトリを対象にする場合は、以下のオプションを使用します。
【 -r:ディレクトリを再帰的に検索】
-r オプションを使用すると、指定のディレクトリ下にあるファイルやディレクトリを対象に検索できます。
文字列を含むファイルがある場合、該当のファイルのパスと文字列を含む行が合わせて表示されます。
$ grep -r "Hello World" ~/desktop/Users/User/desktop/sample.txt:Hello World!【 -l:一致したファイルのパスのみ表示】
-l オプションを使用すると、該当の行は表示せずにファイルパスのみを表示します。
$ grep -rl "Hello World" ~/desktop/Users/User/desktop/sample.txt正規表現を駆使して柔軟なパターン検索をおこなう
grepコマンドは、単純な文字列検索のみでなく、正規表現を使用したパターン検索も実行できます。
詳しい使い方について見ていきましょう。
基本正規表現(BRE)と拡張正規表現(ERE)の違い
grepには、以下の2種類の正規表現があります。
- 基本正規表現(BRE)… デフォルト
- 拡張正規表現(ERE)… -Eオプションで使用可能
主な違いは、記述時の記号の扱いです。
例えば、「AまたはB」 のパターンを表現する場合、BRE と ERE では以下のように書き方が変わります。
・BREの場合:
grep "A¥|B" sample.txt・EREの場合:
grep "A|B" sample.txtエスケープする回数が少なく直感的に記述できるため、実務においては ERE の方がよく使用されています。
メタ文字の組み合わせパターン
正規表現は、メタ文字と呼ばれる記号と文字を組み合わせて記述します。
メタ文字は種類が多岐に渡るため、よく使うメタ文字を優先的に覚えておくと便利です。
例えば、以下のメタ文字は使用頻度が高い傾向にあります。
- .:任意の1文字
- *:直前の文字の0回以上の繰り返し
- ^:行頭
- $:文末
- []:文字クラス
$ grep "^ERROR" sample.log # ERRORで始まる文字列
$ grep -E "error|fail" sample.log # error もしくは fail を含む文字列
$ grep "[0-9]" sample.log # 数字を含む文字列こうした組み合わせにより、柔軟な条件指定が可能となります。
パイプと組み合わせた高度なフィルタリング手法
grepは、他のコマンドとパイプ(|) で接続することで、より便利に活用できます。
実際の使用例について見てきましょう。
コマンド出力結果から必要な情報のみを抽出する手順
例えば、動作中のプロセス一覧の中から特定のプロセスを探す場合、以下のように記述します。
$ ps aux | grep nginx上記の例では grep自身もヒットするため、以下の方法で除外できます。
$ ps aux | grep nginx | grep -v grep以下のように、さらに絞り込むことも可能です。
$ ps aux | grep nginx | grep workerこのように、段階的にフィルタリングしていくことで、目的の情報のみを効率的に抜き出すことができます。
ログ調査を高度化する連続フィルタリング術
実務でよく使用されるのが、grepコマンドを利用したログ解析です。
例えば、以下のように記述してエラー情報を抽出します。
$ grep "ERROR" sample.log | grep "DB" | grep -v "timeout"上記のコマンドで実行される手順は以下の通りです。
- ERRORを含む行を抽出
- その中からDBに関連するものを抽出
- timeoutのものは除外
このように条件を重ねて絞ることで、必要な情報のみを抽出できます。
また、時間帯で絞る場合なども有効です。
$ grep "2025-05-15" sample.log | grep "ERROR"膨大になりがちなログ情報の中から必要な情報のみを取得する上で、非常に重要なテクニックとなります。
まとめ
grepコマンドは、テキスト検索を行う上で重要なコマンドとなります。
上述したように、ログ解析などでも重宝される方法であり、シンプルながらも応用範囲の広いコマンドでもあるので、使い方をしっかりと覚えて活用できるようにしておきましょう。
Linuxの勉強方法は?
書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。
ただ、Linuxに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。
プログラミングスクールならテックマニアがおすすめ!
ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。