ファイル操作

Linux grepコマンド入門|テキストからパターンを検索する

Linux grep テキスト処理

Linux grepコマンド入門
テキストからパターンを検索する

grepコマンドの基本的なテキスト検索から正規表現を使った高度なパターンマッチングまで解説します。

こんな人向けの記事です

  • ファイル内の文字列検索を効率的に行いたい方
  • ログ解析やコード検索でgrepを活用したい方
  • 正規表現を使った高度なパターンマッチングを学びたい方

Step 1grepコマンドの基本

grepコマンドは「Global Regular Expression Print」の略で、テキストから指定したパターンに一致する行を検索・抽出するコマンドです。

ターミナル
# ファイルから文字列を検索
grep "error" log.txt
grep "user" /etc/passwd

# 大文字小文字を区別しない検索
grep -i "Error" log.txt

# 単語全体をマッチ
grep -w "test" file.txt      # "testing"にはマッチしない

# 行番号を表示
grep -n "function" script.py

# 複数ファイルから検索
grep "TODO" *.py

# パイプラインで検索
ps aux | grep "apache"

基本構文: grep "パターン" ファイル名 で指定したパターンを含む行を表示します。

Step 2正規表現を使った検索

grepは正規表現を使った強力なパターンマッチングが可能です。

ターミナル
# 行の先頭・末尾でマッチ
grep "^start" file.txt       # 行の開始が"start"
grep "end$" file.txt         # 行の終了が"end"
grep "^$" file.txt           # 空行

# 文字クラス
grep "[0-9]" file.txt        # 数字を含む行
grep "[a-z]" file.txt        # 小文字を含む行

# 拡張正規表現(-E)
grep -E "error|warning" log.txt    # errorまたはwarning
grep -E "^(http|https)://" urls.txt

# 実用的な正規表現
grep "^#" config.conf        # コメント行
grep -v "^#" config.conf     # コメント以外の行
正規表現説明
^行の開始
$行の終了
.任意の1文字
*直前の文字が0回以上
+直前の文字が1回以上(-E必要)
[]文字クラス
|OR演算子(-E必要)

Step 3よく使うオプション一覧

grepコマンドの実用的なオプションを紹介します。

ターミナル
# 逆検索(マッチしない行を表示)
grep -v "comment" file.txt

# マッチした行数をカウント
grep -c "error" log.txt

# コンテキスト表示(前後の行も表示)
grep -A 3 "error" log.txt    # 後3行も表示
grep -B 2 "warning" log.txt  # 前2行も表示
grep -C 1 "fatal" log.txt    # 前後1行ずつ表示

# 再帰検索(ディレクトリ内を検索)
grep -r "TODO" /path/to/project/

# マッチしたファイル名のみ表示
grep -l "pattern" *.txt

# 固定文字列検索(正規表現を無効化)
grep -F "special.chars" file.txt
オプション説明
-i大文字小文字を区別しない
-vマッチしない行を表示(逆検索)
-n行番号を表示
-cマッチした行数をカウント
-w単語境界でマッチ
-rディレクトリを再帰的に検索
-lマッチしたファイル名のみ表示
-A Nマッチ行の後N行も表示
-B Nマッチ行の前N行も表示
-C Nマッチ行の前後N行を表示
-E拡張正規表現を使用
-F固定文字列として検索
-oマッチ部分のみ表示
-q出力せず終了ステータスのみ返す

Step 4実践的な使用例

ログ解析、システム管理、開発での実践的なgrep活用例を紹介します。

ターミナル
# ログ解析
grep "ERROR" /var/log/apache2/error.log
grep "$(date +%Y-%m-%d)" /var/log/syslog    # 今日のログ

# システム管理
grep -v "^#" /etc/fstab | grep -v "^$"      # 有効な設定行のみ
ps aux | grep -v grep | grep apache         # プロセス検索

# 開発・コード検索
grep -rn "TODO" --include="*.py" .           # PythonファイルのTODO検索
grep -l "deprecated" src/*.py                # 非推奨機能を含むファイル

# セキュリティチェック
grep "Failed password" /var/log/auth.log     # ログイン失敗の検出

# 条件分岐での使用
if grep -q "error" log.txt; then
    echo "エラーが見つかりました"
fi

注意: ps aux | grep apache ではgrep自身のプロセスもマッチします。grep -v grepを追加するか、grep [a]pacheのテクニックで回避できます。

Step 5パイプラインとの組み合わせ

grepは他のコマンドとパイプラインで組み合わせることで、より強力なテキスト処理が可能になります。

ターミナル
# リアルタイムログ監視
tail -f /var/log/syslog | grep "error"

# 複数条件の組み合わせ
grep "error" log.txt | grep -v "minor"     # errorを含むがminorを除外

# 統計とカウント
grep -o "word" file.txt | wc -l            # 単語出現回数

# IPアドレス別アクセス数
grep "IP:" log.txt | sort | uniq -c | sort -rn

# findとの連携
find . -name "*.log" -exec grep -l "ERROR" {} +

grep系コマンドの使い分け: grep=基本検索、grep -E(egrep)=拡張正規表現、grep -F(fgrep)=固定文字列検索(高速)