Windows上でテキストログを効率的に処理するには、grep(検索)、sed(置換)、awk(整形)の3つのツールが欠かせません。これらはLinuxの標準的なツールですが、WindowsではMSYS2やGit Bashを導入することで利用可能になります。本記事では、各ツールの基本的な使い方と実践的なログ解析例を紹介します。
ツールの導入
MSYS2をインストール後、以下のコマンドでパッケージを追加します。
pacman -Syu
pacman -S grep sed awk
Git Bashをインストールすれば、デフォルトでこれらのツールが使用可能です。
grep – テキスト検索の基本
grepは指定したパターンに一致する行を抽出します。コマンド形式は以下の通りです。
grep [オプション] <パターン> <ファイル>
主なオプション:
-i:大文字小文字を区別しない-n:行番号を表示-o:一致した部分のみ表示-v:一致しない行を表示-E:拡張正規表現を使用-r:再帰的に検索
例:カレントディレクトリ以下の全ファイルから「ERROR」を検索(大文字小文字無視)
grep -rni "ERROR" .
例:特定のログファイルから「critical」を含む行を、前後3行を含めて表示
grep -C 3 "critical" app.log
sed – ストリームエディタによる置換
sedはテキストの置換、削除、挿入を行います。基本的な置換構文:
sed 's/旧文字列/新文字列/g' ファイル
オプション-iでファイルを直接編集します(元のファイルはバックアップ推奨)。
例:ログファイル内の「WARN」を「WARNING」に置換
sed -i 's/WARN/WARNING/g' event.log
例:特定の行のみを削除(5行目を削除)
sed '5d' data.txt
例:正規表現を使った置換(IPアドレスをマスク)
sed -E 's/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/***.***.***.***/g' access.log
awk – フィールド処理と整形
awkはテキストを行単位で処理し、フィールド(列)を簡単に操作できます。デフォルトの区切り文字は空白ですが、-Fで変更可能です。
awk [オプション] 'プログラム' ファイル
awk 'BEGIN{アクション} パターン{アクション} END{アクション}' ファイル
主な組み込み変数:
NF:フィールド数(最後の列は$NF)NR:現在の行番号(ファイルをまたいで連続)FNR:ファイルごとの行番号FS:入力フィールド区切り文字(-Fと同じ)OFS:出力フィールド区切り文字
例:CSVファイルの第2列と第3列を表示(区切り文字はカンマ)
awk -F',' '{print $2, $3}' report.csv
例:各行の文字数を表示
awk '{print NR, length($0)}' file.txt
例:printfを使った整形出力(第1列を10文字幅で左詰め、第2列を浮動小数点数で表示)
awk '{printf "%-10s %5.2f\n", $1, $2}' data.txt
複数区切り文字の指定:カンマ、スペース、コロンで区切る
awk -F'[, :]' '{print $1, $2, $3}' multi_delim.txt
実践例:ログ解析
以下のようなログファイル(system_log.txt)があるとします。
2026-05-12 14:36:02.9,INFO,2544,35,Drv1:status=0,temp=45.2,pressure=1013
2026-05-12 14:36:03.1,INFO,2544,26,Drv1:status=1,temp=45.3,pressure=1012
2026-05-12 14:36:03.3,WARN,2544,16,Drv1:overheat,temp=72.8
2026-05-12 14:36:03.4,INFO,2544,23,Drv1:status=0,temp=45.1,pressure=1013
2026-05-12 14:36:03.8,ERROR,2544,39,Drv1:critical_failure
目的: 温度(temp)が70を超える警告行を抽出し、時刻と温度を整形表示する。
まず、grepで「temp」を含む行を抽出し、さらにawkで温度値を取得します。
grep -E "temp=[0-9]{2,}" system_log.txt | awk -F'[,=]' '{if ($5+0 > 70) print $1, $5}'
出力例:
2026-05-12 14:36:03.3 72.8
別の方法:sedで時刻部分を整形し、awkで集計することも可能です。
以上、Windows環境でgrep、sed、awkを活用する基本を解説しました。これらのツールを組み合わせることで、複雑なログ解析もコマンドラインで効率的に行えます。