Windows環境でのテキストログ処理三種の神器:grep検索、sed置換、awk整形

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を活用する基本を解説しました。これらのツールを組み合わせることで、複雑なログ解析もコマンドラインで効率的に行えます。

タグ: grep sed awk テキスト処理 正規表現

8月3日 01:45 投稿