新Linux入門|grepコマンドを理解しよう!テキストファイルを検索する方法

Linuxでは、ログや設定ファイルなどテキスト形式のデータを扱う機会がとても多いですよね。
そんなときに「特定の文字列を素早く見つけたい!」という場面で活躍するのが grepコマンド です。

grepは、テキストファイル内から指定したパターンに一致する行を検索・抽出する コマンドです。
正規表現を使うことで、単純な文字検索だけでなく、複雑なパターン検索も柔軟に行えます。

システム管理やログ解析の必須ツールのひとつです。

🔍 grepコマンドの概要

grep は “Global Regular Expression Print” の略で、
指定した文字列や正規表現に一致する行を探し出し、その行を出力します。

つまり「grep」は「検索」の代名詞のような存在です。
ファイルの中から目的の情報を瞬時に見つけ出すことができる、とても便利なツールです。

📘 コマンド書式

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

📗 例

[suzuki@AlmaLinux ~]$ sudo grep error /var/log/messages

このコマンドは、/var/log/messages ファイルの中から「error」という文字を含む行を表示します。

⚙️ grepコマンドの主なオプション一覧

オプション説明
-i大文字・小文字を区別せずに検索する。
-v指定したパターンに一致しない行を表示する(反転検索)。
-n検索結果の行番号を表示する。
-r指定したディレクトリ以下を再帰的に検索する。
-e [文字列]複数のパターンを指定してOR検索が可能。
-l一致した行があるファイル名のみを表示する。
-c一致した行の件数を表示する。
-E拡張正規表現を有効にする(+ , ? )
-F正規表現を無効にして、単なる文字列として扱う。

💡 ポイント

  • 通常のgrepでは「正規表現」が使えますが、拡張正規表現を利用したいときは grep -E を使います。
  • -r オプションを使うと、フォルダ内のすべてのファイルをまとめて検索できます。

🧪 grepコマンドの使用例と出力解説

① /etc/services ファイルから「www」を含む行を検索

[suzuki@AlmaLinux ~]$ grep www /etc/services
#       http://www.iana.org/assignments/port-numbers
http            80/tcp          www www-http    # WorldWideWeb HTTP
http            80/udp          www www-http    # HyperText Transfer Protocol
www-ldap-gw     1760/tcp                # www-ldap-gw
www-ldap-gw     1760/udp                # www-ldap-gw
www-dev         2784/tcp                # world wide web - development
www-dev         2784/udp                # world wide web - development
flirtmitmir     3840/tcp                # www.FlirtMitMir.de
flirtmitmir     3840/udp                # www.FlirtMitMir.de

💬 「www」という文字列を含む行が抽出されます。

② 大文字・小文字を区別せずに検索

[suzuki@AlmaLinux ~]$ grep -i www /etc/services
#       http://www.iana.org/assignments/port-numbers
http            80/tcp          www www-http    # WorldWideWeb HTTP
http            80/udp          www www-http    # HyperText Transfer Protocol
webcache        8080/tcp        http-alt        # WWW caching service
webcache        8080/udp        http-alt        # WWW caching service
www-ldap-gw     1760/tcp                # www-ldap-gw
www-ldap-gw     1760/udp                # www-ldap-gw
www-dev         2784/tcp                # world wide web - development
www-dev         2784/udp                # world wide web - development
flirtmitmir     3840/tcp                # www.FlirtMitMir.de
flirtmitmir     3840/udp                # www.FlirtMitMir.de

💬 -i オプションにより、WWW や Www などの大文字・小文字の違いを無視して検索できます。

③ /etc/passwd ファイルから「tanaka」を含む行を検索

[suzuki@AlmaLinux ~]$ grep tanaka /etc/passwd
tanaka:x:1001:1001::/home/tanaka:/bin/bash

💬 指定した文字列に一致するユーザー情報が表示されます。

④ 行番号付きで「error」を検索

[root@AlmaLinux ~]# grep -n error /var/log/messages
52:Oct 28 10:43:11 systemd[1]: error: failed to start service

💬 -n オプションで行番号を表示することで、どの行にエラーがあったか一目でわかります。

⑤ ディレクトリ全体を再帰的に検索

[suzuki@AlmaLinux ~]$ grep -r pattern /home
/home/suzuki/data.txt:pattern found here
/home/suzuki/test.sh:echo "pattern"

💬 -r オプションを付けると、サブディレクトリも含めて検索します。

⑥ OR検索(複数パターンを指定)

[root@AlmaLinux ~]# grep -e warning -e error /var/log/messages
Nov 20 14:12:44 AlmaLinux alsactl[780]: alsa-lib main.c:1554:(snd_use_case_mgr_open) error: failed to import hw:0 use case configuration -2
Nov 20 14:12:50 AlmaLinux org.gnome.Shell.desktop[1254]: libEGL warning: egl: failed to create dri2 screen
(省略)

💬 -e オプションを複数回使うことで、「warning」または「error」を含む行を抽出します。

⑦ 複数ファイルからまとめて検索

[root@AlmaLinux ~]# grep bash /etc/default/*
/etc/default/useradd:SHELL=/bin/bash

💬 ワイルドカード(*)を使うことで、複数ファイルを一度に検索できます。

🧩 grepと他の検索コマンドの違い

コマンド特徴
grepファイルの中身(テキスト内容)を検索する。
findファイル属性を検索する。
locateデータベースを使って高速にファイル名を検索する。

💬 つまり、grepは「内容を探す」ためのコマンドです。
findやlocateと併用すれば、「場所」も「中身」も両方すぐに探せます。

✅ まとめ

  • grepは、テキストファイルの中身を検索する最強ツール
  • 正規表現にも対応しており、複雑なパターン検索も可能。
  • -i, -r, -n, -e などのオプションを組み合わせるとさらに便利。
  • findやlocateと併用することで、ファイル探索の効率が大幅アップ!

💬 AlmaLinuxの管理やログ解析の現場では、「まずgrepで調べる」が基本です。
どんなファイルでも、grepを使えば必要な情報をすぐに見つけ出せます。