【Bash講座 第10回】「grep・sed・awk」…この呪文が使えれば、君もLinuxマスターだ
こんにちは!「リナックス先生」です。
前回は、ループ処理を使って大量のファイルを一括操作する方法を学びました。
コウ君、シェルスクリプトでの自動化は楽しんでる?
先生!ループ処理は便利なんですけど、悩みがあります。
「エラーログの中から “Error” って書いてある行だけ抜き出して、件数を数えたい」みたいな時、どうすればいいんですか?
今の知識だと、全部表示して目で数えるしかなくて…
ふふ、ついにその壁にぶつかったわね。
Linuxには、テキストファイルを外科手術のように加工・集計する「三種の神器」が存在するの。
それが「grep(検索)」「sed(置換)」「awk(整形)」よ。
これらをパイプで繋げば、どんな複雑なログ解析もコマンド1行で終わるわ。覚悟して聞きなさい!
第10回となる今回は、Linux操作において「最強」のスキルセットと言われるテキスト処理ツール群を解説します。
これらを使いこなせるようになると、Excelで何時間もかけていた集計作業が、わずか数秒で終わるようになります。
本講座のカリキュラム(全12回)
AlmaLinux 9 (RHEL 9互換) 環境を前提に、基礎から応用までステップバイステップで進めます。
- Bash入門編:シェルとカーネルの関係、CUIの哲学、環境構築
- ファイル操作の極意:絶対パス・相対パスと「ワイルドカード」の魔術
- 権限(パーミッション)とユーザー:chmod, chown, sudoの仕組みを完全理解
- 入出力リダイレクトとパイプ:Linuxの真骨頂!コマンド同士を連携させる技術
- テキスト処理の基本:cat, head, tail, less…ファイルの中身を覗く道具たち
- 最強のエディタ「Vi/Vim」入門:サーバー内でテキストを編集する必須スキル
- シェルスクリプトの第一歩:ファイルにまとめて自動実行!変数と引数の基礎
- 条件分岐(if文):サーバーの状態を見て「判断」できるスクリプトを作る
- 繰り返し処理(for/while文):面倒な単純作業を1秒で終わらせるループ処理
- 【今回】テキスト処理の応用:grep, sed, awk…ログ解析の達人になるための三種の神器
- 実践・自動化スクリプト:バックアップと監視を自動化し、Cronで定期実行する
- 総仕上げ:自作スクリプトの集大成と、エンジニアとしての歩き方
1. 検索のスペシャリスト「grep(グレップ)」
「Global Regular Expression Print」の略で、ファイルの中から「特定のパターンを含む行」だけを抜き出して表示します。
Linuxで最も頻繁に使われるコマンドの一つです。
基本の使い方
# 書式: grep [検索したい文字] [ファイル名] # error.log から "Failed" という文字が含まれる行を探す [root@localhost ~]# grep "Failed" /var/log/error.log
便利なオプション
これを知らないと損をする、必須オプションです。
| オプション | 意味 | 使い所 |
|---|---|---|
-i |
大文字小文字を区別しない | “Error” も “error” も “ERROR” も全部見つけたい時 |
-v |
一致しない行を表示 | “Info”(通知)以外の重要な行だけ見たい時 |
-r |
ディレクトリ内を再帰的に検索 | 「どのファイルに書いたっけ?」と探す時 |
-n |
行番号を表示 | ファイルの何行目にあるか知りたい時 |
少し高度な検索:正規表現
grep の真価は「正規表現(Regex)」を使った時に発揮されます。
「行頭がAで始まる」「数字だけの行」といった曖昧な検索が可能です。
# 行頭(^)が "Jan" で始まる行を探す(1月のログだけ抽出など) grep "^Jan" access.log # 行末($)が "OK" で終わる行を探す grep "OK$" result.txt # "User" の後に任意の1文字(.)があって、その後に数字がある行 grep "User.[0-9]" auth.log
2. 置換の魔術師「sed(セド)」
「Stream EDitor」の略で、テキストを読み込みながら「編集(置換や削除)」を行って出力します。
エディタを開かずに、コマンドだけでファイルの中身を書き換えることができます。
基本の使い方:文字列の置換
最もよく使うのが s コマンド(substitute:置換)です。
# 書式: sed 's/置換前/置換後/g' [ファイル名] # text.txt の中の "apple" を "orange" に全て(/g)置換して画面に表示 [root@localhost ~]# sed 's/apple/orange/g' text.txt
⚠️ 注意:画面に出るだけ!
上記コマンドは、結果を画面(標準出力)に表示するだけで、元のファイルは書き変わりません。
元のファイルを直接書き換えたい場合は、-i オプションを使います。
# 設定ファイルの "enabled=0" を "enabled=1" に書き換える sed -i 's/enabled=0/enabled=1/g' config.conf
行の削除
特定の行を消すこともできます。
# "#"(コメント) で始まる行を削除(d)して表示 [root@localhost ~]# sed '/^#/d' config.conf # 1行目から5行目を削除して表示 [root@localhost ~]# sed '1,5d' data.csv
3. 整形の達人「awk(オーク)」
開発者3人の頭文字をとって名付けられたこのツールは、実はコマンドというより「プログラミング言語」です。
特に「列(カラム)」ごとの処理に特化しており、CSVやログファイルの集計に最強の威力を発揮します。
基本の使い方:特定の列を抜き出す
空白やタブで区切られたデータを「1列目」「2列目」として扱えます。
# 書式: awk '{print $列番号}' [ファイル名]
# 以下のような access.log があるとする
# [IPアドレス] [日付] [メソッド] [パス]
# 192.168.1.1 2024-01-01 GET /index.html
# 1列目(IP)と4列目(パス)だけを表示する
[root@localhost ~]# awk '{print $1, $4}' access.log
192.168.1.1 /index.html
条件を指定して処理
Excelのフィルターのようなことができます。
# 3列目(ステータスコード)が 500 以上の行だけ表示
[root@localhost ~]# awk '$3 >= 500 {print $0}' access.log
※ $0 は「その行全体」という意味です。
4. 【実践】三種の神器とパイプラインの融合
それぞれの使い方はなんとなく分かりました。
でも先生、これらをどう組み合わせたら「ログ解析」になるんですか?
いい質問ね! ここからが本番よ。
第4回で習った「パイプ(|)」を使って、コマンドのリレーを行うの。
「grepで絞り込み」→「awkで必要な列を抜き出し」→「sortで並べ替え」→「uniqで数える」。
この黄金パターンを見てみなさい!
シナリオ:攻撃者を特定せよ
Webサーバーのアクセスログから、「404エラー(Not Found)を頻発させている不審なIPアドレス」を特定し、アクセス数が多い順にランキング表示します。
# コマンドの全貌
grep " 404 " access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -5
解説:データの流れ
grep " 404 " access.log
ログファイルから、ステータスコードが404の行だけを抜き出す。awk '{print $1}'
その行の中から、1列目(IPアドレス)だけを抜き出す。sort
同じIPアドレスが隣り合うように並べ替える。(uniqの前準備)uniq -c
重複している行をまとめ、出現回数(-c)をカウントする。sort -nr
カウント数(数値:n)の多い順(逆順:r)に並べ替える。head -5
トップ5だけを表示する。
実行結果:
128 203.0.113.55 54 198.51.100.23 12 192.168.1.5
「203.0.113.55」というIPが、404エラーを128回も出していることが一目瞭然です!
次回予告:ついに実践!自動バックアップスクリプト
第10回は、テキスト処理の三種の神器「grep・sed・awk」について解説しました。
これらは非常に奥が深く、分厚い専門書が何冊も出るほどですが、今回紹介した基本パターンだけでも実務の9割はカバーできます。
さて、次回はいよいよこれまでの知識を総動員した「実践編」です。
「Webサイトのデータを丸ごとバックアップし、古いものを自動削除し、結果をログに残す」という、現場でそのまま使えるレベルのシェルスクリプトを作成します。
さらに、それを決まった時間に自動実行させる「Cron(クーロン)」の設定も行います。
次回までに、自分のサーバーのログファイル(/var/log/messages や /var/log/secure)を grep して、「Fail」や「Error」がどれくらい出ているか調べてみてね。
意外な攻撃の痕跡が見つかるかもしれないわよ…ふふふ。
▼ログ解析もサクサク動く!推奨VPS



コメント