Ubuntuでテキスト処理をするとき、sedとawkは知っておくと格段に作業が速くなるコマンドです。ログファイルの整形・特定行の抽出・CSVの集計など、Linuxを使いこなすうえで欠かせないツールです。
本記事では実際にUbuntu 24.04 LTS(Docker公式イメージ)でコマンドを実行した結果をもとに、sedとawkの使い方を具体的に解説します。
この記事のポイント
- Ubuntu 24.04 には GNU sed 4.9 と mawk 1.3.4 が標準搭載されている(実測済み)
sedは「行単位のテキスト置換・削除・抽出」に強いawkは「フィールド分割・条件フィルタ・数値集計」に強い- 2つをパイプでつなぐとログ解析・設定ファイル処理が1行で完結する
- コマンドは Ubuntu 22.04 でも動作確認済み
目次
- 前提環境と確認方法
- sedの基本的な使い方
- sedの応用例(正規表現・複数置換)
- awkの基本的な使い方
- awkの応用例(集計・CSVパース)
- sed + awk の組み合わせ実例
- よくあるエラーと解決策
- まとめ
前提環境と確認方法
本記事のコマンドはすべて以下の環境で実行・確認しています。
| 項目 | 値 |
|---|---|
| OS | Ubuntu 24.04 LTS(noble) |
| sed バージョン | GNU sed 4.9 |
| awk バージョン | mawk 1.3.4 20240123 |
| 実行環境 | Docker公式イメージ ubuntu:24.04 |
| 確認日 | 2026-06-13 |
まず自分の環境でバージョンを確認してみましょう。
sed (GNU sed) 4.9
$ awk –version | head -1
mawk 1.3.4 20240123

Ubuntu 24.04 では sed(GNU sed 4.9)と awk(mawk 1.3.4)が標準でインストールされています。どちらも追加インストールなしで使えます。
Ubuntu 22.04 との違い
Ubuntu 22.04 では sed 4.8 が搭載されていました(実測済み)。24.04 では 4.9 にアップデートされています。awk は 22.04 でも mawk が使えますが、24.04 からはデフォルトで含まれています。どちらのバージョンでも本記事のコマンドはそのまま動作します。
sedの基本的な使い方
sed(stream editor)はテキストストリームを1行ずつ処理するコマンドです。ファイルを直接編集するのではなく、標準入力を受け取って加工した結果を標準出力に流す設計になっています。
手順1:基本構文を理解する
sed の基本構文はシンプルです。
Hello, Linux!
s/置換前/置換後/ が sed の最も基本的な使い方です。s は substitute(置換)の略です。
手順2:行削除(/パターン/d)
特定のパターンに一致する行を丸ごと削除できます。
apple
grape
blueberry
banana が含まれる行だけが削除され、残り3行が出力されました。設定ファイルのコメント行(`#`で始まる行)を除去するときによく使います。
手順3:特定行の抽出(sed -n ‘開始,終了p’)
line2
line3
-n は自動出力を抑制するオプション、'2,3p' は2〜3行目を表示(print)する指示です。組み合わせることで「指定した行範囲だけを表示」できます。
sedの応用例(正規表現・複数置換)
手順4:複数ルールの同時適用(-e オプション)
複数の置換ルールを1コマンドで適用するには -e を使います。
FOO BAR baz
手順5:正規表現でIPアドレスをマスク
ログに含まれるIPアドレスを正規表現でまとめてマスクする例です。
Server IP: x.x.x.x (private)
g フラグを末尾につけると、行内の該当パターンをすべて置換します(デフォルトは最初の1件のみ)。
手順6:コメント行・空行を一度に除去
host = localhost
port = 8080
user = admin
; でルールをつなげて複数の削除条件を1コマンドにまとめられます。設定ファイルの前処理でよく使うパターンです。

awkの基本的な使い方
awk はフィールド(列)単位でテキストを処理するのが得意なコマンドです。スペースやタブで区切られたデータを扱うとき、sed より直感的に書けます。
手順7:特定フィールドの抽出(, …)
$1 が1列目、$2 が2列目…と番号でフィールドを参照します。
Alice Engineer
Bob Designer
Charlie Manager
手順8:条件フィルタ($フィールド 演算子 値)
フィールドの値で行を絞り込めます。
Alice age=30
Charlie age=35
2列目(年齢)が30以上の行だけ表示されました。grep とは違い数値条件でフィルタリングできるのが awk の強みです。
手順9:数値集計(sum, avg, NR)
sum=150 avg=30
NR(Number of Records)は処理した行数が自動で入る変数です。END{} ブロックは全行の処理が終わった後に1回だけ実行されます。
awkの応用例(集計・CSVパース)
手順10:フィールドセパレータ指定(-F)でCSVを処理
デフォルトのフィールドセパレータはスペース/タブですが、-F で変更できます。
Alice: A
Bob: B
Charlie: A
NR>1 でヘッダー行(1行目)をスキップし、名前と成績だけを出力しました。
手順11:BEGIN/END ブロックでヘッダー付き出力
=== fruits ===
1: apple
2: banana
3: grape
total=3
BEGIN{} は最初の行を読む前に実行、END{} は全行処理後に実行されます。レポートのヘッダー・フッター出力に便利です。

sed + awk の組み合わせ実例
sed と awk をパイプでつなぐことで、実務で役立つテキスト処理が1行で完結します。
実例①:アプリログのエラー件数を集計する
以下のようなアプリログを用意して、エラー件数をカウントしてみます。
$ awk ‘{print $2}’ /tmp/sample.log | sort | uniq -c | sort -rn
2 INFO
2 ERROR
1 WARN
awk で2列目(ログレベル)だけ取り出し、sort | uniq -c でレベル別に件数を集計しています。ERROR が2件、INFO が2件、WARN が1件という結果が実測で得られました。
実例②:sedでタイムスタンプを除去してawkで集計
INFO 2
WARN 1
ERROR 2
sed でタイムスタンプ部分(行頭の日付)を除去してから、awk でレベルごとに件数を集計しました。「sed でフォーマット整形 → awk で集計」はログ解析の定番パターンです。
実例③:/etc/passwd から一般ユーザーを抽出
ubuntu uid=1000 shell=/bin/bash
/etc/passwd はコロン区切りのファイルです。-F: でセパレータを指定し、UID が1000以上(一般ユーザー)の行だけを抽出しています。Ubuntu 24.04 のコンテナでは ubuntu ユーザーだけが表示されました。


よくあるエラーと解決策
エラー①:sed: -e expression #1, char X: unterminated `s’ command
sed: -e expression #1, char 11: unknown option to `s’
原因: s/置換前/置換後/ の区切り文字が合っていないか、フラグが不正です。末尾フラグは g(全置換)・I(大小文字無視)などに限られます。
スラッシュを含む文字列を置換したいとき
置換前後にスラッシュが含まれる場合は区切り文字を変更できます。
例:sed 's|/usr/local|/opt|g' のようにパイプや ! なども使えます。
エラー②:awk: line 1: syntax error at or near end of string
原因: awk のプログラム内で引用符が対応していないか、{} の対応がずれています。
awk: line 1: syntax error at or near end of string
$ echo ‘test’ | awk ‘{print $1}’
test
エラー③:awk で gawk の機能が使えない
Ubuntu 24.04 のデフォルト awk は mawk です。gawk 専用の機能(gensub など)を使いたい場合は gawk を別途インストールします。
Reading package lists… Done
Building dependency tree… Done
Setting up gawk (1:5.2.1-2build3) …
$ gawk –version | head -1
GNU Awk 5.2.1, API 3.2, PMA Avon 8-g1, (GNU MPFR 4.2.1, GNU MP 6.3.0)
まとめ
sed と awk の使い方をまとめると次のとおりです。
sed / awk まとめ
- Ubuntu 24.04 には GNU sed 4.9 と mawk 1.3.4 が標準搭載(追加インストール不要)
- sed は「置換(s/a/b/)・削除(/p/d)・行抽出(-n ‘2,3p’)」が基本
- awk は「フィールド参照($1〜)・条件フィルタ・数値集計(END{})」が得意
- sed でフォーマット整形 → awk で集計、のパイプパターンがログ解析で有効
- gawk 専用機能が必要な場合は
sudo apt install gawkで追加可能
sed と awk を覚えておくと、VPSやサーバー上でのログ解析・設定ファイルの一括修正がシェルスクリプト一本で完結します。コマンドに慣れてきたら、自分のVPSでリアルなログを処理してみましょう。
VPSを選ぶなら、Vultr(月額$5〜)が東京リージョンもあり初心者にも使いやすいです。詳しくは下記の比較記事もご覧ください。


コメント