こちらからSWELLを購入できます 詳しくはこちら

【Linux】sedコマンド完全ガイド テキストの検索・置換・削除を行うコマンド

  • URLをコピーしました!

今回はLinuxコマンドであるgrepコマンドについて解説します

文字列検索とパターンマッチングを行う非常に強力なコマンドです
ログ検索やファイル内容の調査など、システム管理の現場で最も頻繁に使用されるコマンドの一つなので、ぜひ覚えて帰ってくださいね!
※注 本文の△は半角スペースに置き換えてください。わかりやすくするために△で記述してます

目次

grepコマンドとは??

grepコマンドは、「Global Regular Expression Print」の略で、ファイルや標準入力から指定したパターンに一致する行を検索・表示するコマンドです
正規表現を使用して高度なパターンマッチングが可能で、テキスト検索、ログ解析、データ抽出などで威力を発揮します
システム管理者や開発者にとって必須のツールです

grepコマンドの主なオプション

grepコマンドには多くの便利なオプションがあります

-i (–ignore-case)

大文字小文字を区別せずに検索するオプション
パターンマッチングで大文字小文字の違いを無視します

コマンド実行例
grep△-i△”error”△logfile.txt

-v (–invert-match)

パターンに一致しない行を表示するオプション
条件を反転させて、指定したパターンを含まない行を抽出します

コマンド実行例
grep△-v△”debug”△application.log

-r (–recursive)

ディレクトリを再帰的に検索するオプション
指定したディレクトリ以下のすべてのファイルを検索対象にします

コマンド実行例
grep△-r△”TODO”△/project/src/

-n (–line-number)

マッチした行の行番号を表示するオプション
検索結果にファイル内での行番号を付加します

コマンド実行例
grep△-n△”function”△script.js

-c (–count)

マッチした行数のみを表示するオプション
パターンに一致する行の総数を出力します

コマンド実行例
grep△-c△”ERROR”△system.log

-l (–files-with-matches)

マッチしたファイル名のみを表示するオプション
パターンを含むファイルの名前だけを一覧表示します

コマンド実行例
grep△-l△”password”△*.conf

-w (–word-regexp)

単語境界で完全一致検索するオプション
部分文字列ではなく、完全な単語としてマッチします

コマンド実行例
grep△-w△”cat”△file.txt

-A (–after-context)

マッチした行の後の指定行数を表示するオプション
コンテキスト情報として後続行も出力します

コマンド実行例
grep△-A△3△”Exception”△error.log

-B (–before-context)

マッチした行の前の指定行数を表示するオプション
コンテキスト情報として前の行も出力します

コマンド実行例
grep△-B△2△”FATAL”△system.log

-C (–context)

マッチした行の前後の指定行数を表示するオプション
-Aと-Bを組み合わせた効果があります

コマンド実行例
grep△-C△2△”critical”△app.log

基本的な使い方

grepコマンドでは、文字列パターンを指定してファイルやストリームから該当行を検索します
基本的な構文は「grep△’パターン’△ファイル名」となります

コマンド実行例
grep△”error”△logfile.txt
“error”を含む行を表示
grep△”^start”△file.txt
“start”で始まる行を表示
grep△”end$”△file.txt
“end”で終わる行を表示
cat△file.txt△|△grep△”pattern”
パイプ経由での検索

正規表現パターン

grepの強力な機能の一つが正規表現によるパターンマッチングです
基本正規表現(BRE)と拡張正規表現(ERE)が使用できます

基本正規表現

基本正規表現例
# 文字クラス
grep△”[0-9]”△file.txt          # 数字を含む行
grep△”[a-zA-Z]”△file.txt        # アルファベットを含む行
grep△”[^0-9]”△file.txt         # 数字以外を含む行

# アンカー
grep△”^Error”△file.txt         # 行頭がErrorで始まる
grep△”done$”△file.txt          # 行末がdoneで終わる
grep△”^$”△file.txt           # 空行

# ドット(任意の1文字)
grep△”a.b”△file.txt           # aとbの間に任意の1文字

拡張正規表現(-E オプション)

拡張正規表現例
# 量詞
grep△-E△”[0-9]+”△file.txt        # 1つ以上の数字
grep△-E△”[0-9]*”△file.txt        # 0個以上の数字
grep△-E△”[0-9]?”△file.txt        # 0個または1個の数字
grep△-E△”[0-9]{3}”△file.txt       # ちょうど3個の数字

# 選択(OR演算子)
grep△-E△”error|warning”△file.txt   # errorまたはwarning
grep△-E△”(cat|dog)s?”△file.txt    # cat/cats/dog/dogs

# グループ化
grep△-E△”(https?|ftp)://[^△]+”△file.txt # URL抽出

grepコマンドの実用的な活用例

実際の現場でよく使われるgrepコマンドの活用例をご紹介します

ログ解析での活用

システム管理で最も頻繁に使用されるログファイルの解析例です

ログ解析例
# エラーログの検索
grep△-i△”error\|exception\|fatal”△/var/log/messages

# 特定IPアドレスのアクセス検索
grep△”192\.168\.1\.100″△/var/log/apache2/access.log

# 時間範囲でのログ抽出
grep△”Jan△15△1[0-2]:”△/var/log/syslog

# HTTPステータスコード別集計
grep△-o△'”[0-9]{3}”‘△access.log△|△sort△|△uniq△-c

# 複数ログファイルからの一括検索
grep△-h△”WARN”△/var/log/*.log△|△head△-20

システム監視での活用

システムの状態監視やプロセス管理での活用例です

システム監視例
# 実行中プロセスの検索
ps△aux△|△grep△”apache”

# メモリ使用量の監視
free△-h△|△grep△”Mem”

# ディスク使用量の確認
df△-h△|△grep△-E△”(8[0-9]|9[0-9])%” # 80%以上使用

# ネットワーク接続の監視
netstat△-an△|△grep△”ESTABLISHED”△|△wc△-l

# 失敗したログイン試行の検索
grep△”Failed△password”△/var/log/auth.log△|△tail△-10

ソースコード解析での活用

プログラミングやコードレビューでの活用例です

コード解析例
# 関数定義の検索
grep△-n△”function\|def\|class”△*.py

# TODOコメントの一覧
grep△-r△-n△”TODO\|FIXME\|HACK”△src/

# 特定APIの使用箇所検索
grep△-r△”api\.call”△–include=”*.js”△project/

# 設定ファイルでの値検索
grep△-E△”port\s*=\s*[0-9]+”△*.conf

# デバッグ文の検索
grep△-r△”console\.log\|print\|echo”△src/△|△grep△-v△”#”

データ抽出での活用

CSVファイルやデータファイルからの情報抽出例です

データ抽出例
# CSVから特定条件のレコード抽出
grep△”Tokyo”△customers.csv

# メールアドレスの抽出
grep△-E△-o△”[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}”△file.txt

# IPアドレスの抽出
grep△-E△-o△”([0-9]{1,3}\.){3}[0-9]{1,3}”△logfile.txt

# 電話番号の抽出
grep△-E△”[0-9]{3}-[0-9]{4}-[0-9]{4}”△contacts.txt

# 日付形式のデータ抽出
grep△-E△”[0-9]{4}-[0-9]{2}-[0-9]{2}”△data.txt

高度な機能

grepの高度な機能を活用した複雑な検索例です

ファイルタイプ別フィルタリング

ファイルタイプ別検索
# 特定拡張子のみ検索
grep△-r△”pattern”△–include=”*.js”△project/
grep△-r△”pattern”△–include=”*.{html,css}”△web/

# 特定ファイルを除外
grep△-r△”pattern”△–exclude=”*.min.js”△src/
grep△-r△”pattern”△–exclude-dir=”node_modules”△project/

# バイナリファイルのスキップ
grep△-I△”pattern”△*

# ファイルサイズ制限
find△.△-name△”*.log”△-size△-100M△-exec△grep△”ERROR”△{}△\;

複数パターンの検索

複数パターン検索
# パターンファイルを使用
echo△-e△”error\nwarning\nfatal”△>△patterns.txt
grep△-f△patterns.txt△logfile.txt

# 複数パターンのOR検索
grep△-E△”error|warning|fatal”△logfile.txt

# 複数パターンのAND検索
grep△”user”△file.txt△|△grep△”login”△|△grep△”success”

# パターンの組み合わせ
grep△-E△”(error|warning).*user.*login”△auth.log

コンテキスト検索例
# エラー発生前後の状況を確認
grep△-C△5△”Exception”△application.log

# ログのシーケンス分析
grep△-A△10△”session_start”△session.log

# 関数定義とその内容
grep△-A△20△”function△main”△script.py

# 設定セクション全体を表示
grep△-A△10△”^\[database\]”△config.ini

パフォーマンス最適化

大量のファイルや大きなファイルを効率的に検索するためのテクニックです

パフォーマンス最適化
# 固定文字列検索(高速)
grep△-F△”exact_string”△large_file.txt

# 最初のマッチで終了
grep△-m△1△”pattern”△huge_file.txt

# バイナリファイルをスキップ
grep△-I△-r△”pattern”△/path/

# 特定ディレクトリを除外
grep△-r△”pattern”△–exclude-dir=”{.git,.svn,node_modules}”△project/

# マルチプロセス検索(GNU grep)
find△.△-name△”*.log”△-print0△|△xargs△-0△-P△4△grep△”ERROR”

grepの種類

用途に応じて異なるgrepコマンドを使い分けることができます

grep種類別使い分け
# 標準grep(基本正規表現)
grep△”pattern”△file.txt

# egrep(拡張正規表現)
egrep△”pattern1|pattern2″△file.txt
grep△-E△”pattern1|pattern2″△file.txt   # 同じ意味

# fgrep(固定文字列、高速)
fgrep△”literal_string”△file.txt
grep△-F△”literal_string”△file.txt    # 同じ意味

# rgrep(再帰検索)
rgrep△”pattern”△directory/
grep△-r△”pattern”△directory/       # 同じ意味

出力フォーマット

検索結果の表示方法をカスタマイズできます

出力フォーマット例
# カラー表示
grep△–color=always△”pattern”△file.txt

# マッチした部分のみ表示
grep△-o△”[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}”△file.txt

# ファイル名を表示しない
grep△-h△”pattern”△*.txt

# ファイル名のみ表示
grep△-l△”pattern”△*.txt

# バイト位置を表示
grep△-b△”pattern”△file.txt

# タブ区切りでの出力
grep△-H△-n△”pattern”△*.txt△|△tr△’:’△’\t’

よく使われるパターン集

実際の作業でよく遭遇するパターンをまとめました

定番パターン
# 1. 空行以外を表示
grep△-v△”^$”△file.txt

# 2. コメント行を除外
grep△-v△”^#”△config.file

# 3. 特定の拡張子のファイルから検索
find△.△-name△”*.log”△-exec△grep△”ERROR”△{}△\;

# 4. 大文字小文字を無視した重複除去
grep△-i△”pattern”△file.txt△|△sort△-u

# 5. 数値範囲での検索
grep△-E△”[1-9][0-9]{2,}”△file.txt    # 100以上の数値

# 6. 日付パターンの検索
grep△-E△”[0-9]{4}-[0-9]{2}-[0-9]{2}”△file.txt

# 7. URL抽出
grep△-E△-o△”https?://[^△\”]+”△file.txt

# 8. プロセス監視
ps△aux△|△grep△”[a]pache”         # grepプロセス自体を除外

エラーハンドリング

grepコマンド使用時のエラー対処法です

エラー対処例
# ファイルが存在しない場合の処理
if△[△-f△”$file”△];△then△grep△”pattern”△”$file”;△fi

# 権限エラーを無視
grep△-r△”pattern”△/var/△2>/dev/null

# バイナリファイルエラーを回避
grep△-I△”pattern”△*△2>/dev/null

# マッチしない場合の終了ステータス処理
if△grep△-q△”pattern”△file.txt;△then
△△echo△”Found”
else
△△echo△”Not△found”
fi

他のコマンドとの連携

grepを他のコマンドと効果的に組み合わせる方法です

コマンド連携例
# find + grep
find△/var/log△-name△”*.log”△-exec△grep△”ERROR”△{}△+

# ps + grep
ps△aux△|△grep△”nginx”△|△grep△-v△grep

# tail + grep (ログ監視)
tail△-f△/var/log/messages△|△grep△”ERROR”

# grep + awk
grep△”ERROR”△file.log△|△awk△'{print△$1,△$2}’

# grep + sed
grep△”pattern”△file.txt△|△sed△’s/old/new/g’

# grep + sort + uniq
grep△-o△”[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}”△access.log△|△sort△|△uniq△-c

トラブルシューティング

grepコマンド使用時によくある問題と解決法です

正規表現の問題

正規表現エラー対応
# メタ文字のエスケープ
grep△”192\.168\.1\.1″△file.txt      # ドットをエスケープ
grep△”\$HOME”△file.txt            # ドル記号をエスケープ

# 括弧のエスケープ(基本正規表現)
grep△”\([0-9]\+\)”△file.txt         # 基本正規表現
grep△-E△”([0-9]+)”△file.txt         # 拡張正規表現

# 文字クラスの正しい記述
grep△”[a-zA-Z0-9]”△file.txt         # 英数字
grep△”[[:alnum:]]”△file.txt         # POSIX文字クラス

文字エンコーディング問題

エンコーディング対応
# UTF-8での検索
LANG=C.UTF-8△grep△”日本語”△file.txt

# バイナリファイルのスキップ
grep△-I△”pattern”△*

# 文字化け対応
iconv△-f△SJIS△-t△UTF-8△file.txt△|△grep△”パターン”

# ASCIIのみでの検索
LANG=C△grep△”[[:print:]]”△file.txt

パフォーマンス問題

パフォーマンス改善
# 大きなファイルでの部分検索
head△-n△1000△large_file.txt△|△grep△”pattern”

# 並列処理で高速化
find△.△-name△”*.log”△-print0△|△xargs△-0△-P△4△grep△-l△”ERROR”

# メモリ効率的な検索
grep△–mmap△”pattern”△huge_file.txt

# 固定文字列検索で高速化
grep△-F△”literal_string”△file.txt

ベストプラクティス

grepを効果的に使用するためのガイドラインです

推奨事項
# 1. 適切なオプションの選択
grep△-i△”error”△file.txt          # 大文字小文字を無視
grep△-w△”cat”△file.txt           # 単語境界で検索
grep△-F△”literal”△file.txt         # リテラル文字列

# 2. 効率的なパターン設計
grep△”^ERROR”△file.txt           # 行頭アンカーで高速化
grep△-E△”(error|warn)”△file.txt     # 選択演算子の使用

# 3. 出力の整理
grep△-n△-H△”pattern”△*.txt△|△sort   # ファイル名・行番号付きでソート

# 4. エラーハンドリング
grep△-q△”pattern”△file.txt△&&△echo△”Found”△||△echo△”Not△found”

まとめ

いかがでしたでしょうか
今回はgrepコマンドについてまとめてみました
grepコマンドは文字列検索とパターンマッチングを行うLinuxの最も重要なコマンドの一つです
基本的なテキスト検索から高度な正規表現を使った複雑なパターンマッチングまで、幅広い用途で活用できます
ログ解析、システム監視、ソースコード検索、データ抽出など、システム管理や開発作業において欠かせないツールです
sedやawkと組み合わせることで、さらに強力なテキスト処理パイプラインを構築できるので、ぜひマスターしてください!

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次