「ログから特定のエラーだけを抽出したいのに、どう書けばいいかわからない。」
Linuxのコマンド操作を覚えた後、次の壁として立ちはだかるのが「正規表現」です。grep・sed・vimなど、Linuxの主要コマンドは正規表現と組み合わせることで劇的に使いやすくなります。
この記事では、正規表現をまったく知らない初心者を対象に、Linuxで実際によく使うパターンを中心に解説します。難しい理論は後回しにして、「このパターンを書けば、こう動く」というイメージを最優先に説明します。
実行環境: Ubuntu 24.04 LTS / Rocky Linux 9.4 で動作確認済み
この記事のポイント
・正規表現は「文字のパターン」を表す書き方で、grep・sed・vimで使える
・ . * ^ $ [ ] の6パターンを覚えるだけで現場の8割はこなせる
・grepに -E をつけると「+」「?」「{n}」などの拡張パターンも使える
・sedコマンドと組み合わせると、ファイル内の文字列を一括置換できる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
正規表現とは何か
正規表現とは、「文字のパターン(規則)」を表す書き方のことです。たとえば、メールアドレス・電話番号・特定のエラーメッセージなど、「こんな形をしている文字列を探したい」という要求に応えるのが正規表現です。
Linuxで正規表現がよく使われる場面は主に以下の3つです。
・grep:ファイルや標準入力から、特定パターンにマッチする行を検索する
・sed:ファイルの中の特定パターンを別の文字列に置換する
・vim:テキストを開いた状態で、パターン検索・置換を行う
最初から全部を覚える必要はありません。「grepで使えるようになる」ことを目標に、少しずつ身につけていくのが現実的です。
よく使う正規表現パターン6つ
Linuxのコマンド操作で頻出するパターンを6つに絞って紹介します。まずはこれだけ覚えておけば十分です。| パターン | 意味 | 使用例 |
|---|---|---|
.(ドット) |
任意の1文字にマッチ | c.t → cat, cut, cotなど |
*(アスタリスク) |
直前の文字の0回以上の繰り返し | er*or → eor, error, errrrorなど |
^(キャレット) |
行の先頭にマッチ | ^ERROR → ERRORで始まる行 |
$(ドル記号) |
行の末尾にマッチ | done$ → doneで終わる行 |
[ ](角括弧) |
括弧内のどれか1文字にマッチ | [aeiou] → 母音1文字のどれか |
[^ ](否定) |
括弧内の文字以外の1文字 | [^0-9] → 数字以外の1文字 |
grepで正規表現を使う
1. 基本の使い方
grepはファイルの中から、指定したパターンにマッチする行を表示します。# 基本構文 grep '検索パターン' ファイル名 # 例: /var/log/syslogから「error」を含む行を表示 grep 'error' /var/log/syslog # 例: 大文字小文字を区別しない(-i オプション) grep -i 'error' /var/log/syslog
2. 行頭・行末のパターン
ログファイルで「ERRORから始まる行だけ」を抽出したいケースはよくあります。# 「ERROR」で始まる行だけを表示(^は行頭を意味する) grep '^ERROR' app.log # 「OK」で終わる行だけを表示($は行末を意味する) grep 'OK$' result.txt # 実際の出力例(app.log の内容から) # ERROR: Connection refused at 14:32:01 # ERROR: Timeout exceeded at 15:00:08
3. 任意の文字を表す「.」と「*」
ドットとアスタリスクは組み合わせて使うことが多いです。# 「er」と「or」の間に何かある単語を検索(.は任意の1文字) grep 'er.or' /var/log/messages # 「error」の「r」が何個あっても検索(*は0回以上の繰り返し) grep 'er*or' /var/log/messages # 「.*」(ドット+アスタリスク)は「何でもいい、何文字でもいい」を意味する # 「2026」で始まり「ERROR」で終わる行を表示 grep '^2026.*ERROR$' app.log
4. 文字クラス「[ ]」の使い方
角括弧の中に「どれか1文字」を指定できます。# 「cat」か「cut」か「cot」を検索 grep 'c[auo]t' animals.txt # 「0」から「9」の数字が含まれる行を検索 grep '[0-9]' config.txt # 数字以外の文字が含まれる行を検索(^は「否定」) grep '[^0-9]' numbers.txt # 「a」から「z」の小文字が含まれる行を検索 grep '[a-z]' logfile.txt
5. 拡張正規表現(grep -E)
grepに `-E` オプションをつけると、さらに便利なパターンが使えます。| パターン | 意味 | 使用例 |
|---|---|---|
+ |
直前の文字の1回以上の繰り返し | er+or → error, errrrorなど(eorは含まない) |
? |
直前の文字の0回か1回 | colou?r → color, colour両方 |
{n} |
直前の文字のちょうどn回の繰り返し | [0-9]{3} → 3桁の数字 |
| |
または(どちらかにマッチ) | error|warning → どちらかを含む行 |
# 「error」か「warning」を含む行を表示 grep -E 'error|warning' /var/log/syslog # 3桁の数字を含む行を表示 grep -E '[0-9]{3}' access.log # 「colour」か「color」両方にマッチ grep -E 'colou?r' document.txt
sedで正規表現を使った一括置換
1. sedの基本構文
sed(ストリームエディタ)は、ファイルの中の文字列を正規表現で検索して置換するコマンドです。# 基本構文(s/検索パターン/置換後の文字列/フラグ) sed 's/検索/置換/g' ファイル名 # 例: 「error」を「ERROR」に置換して表示(ファイルは変更しない) sed 's/error/ERROR/g' app.log # 「g」フラグをつけると、1行内の全マッチ箇所を置換(なければ最初の1箇所のみ)
2. sedで正規表現パターンを使う
# 行頭の空白(スペースまたはタブ)を削除 sed 's/^[[:space:]]*//' file.txt # 行末の空白を削除 sed 's/[[:space:]]*$//' file.txt # 数字を「N」に置換(ログのタイムスタンプなどを見やすくする際に使用) sed 's/[0-9]/N/g' timestamp.log # 実際の出力例 # 入力: 2026-05-14 ERROR # 出力: NNNN-NN-NN ERROR
3. ファイルを直接書き換える(-i オプション)
sedの出力は、デフォルトでは画面に表示されるだけでファイルは変更されません。ファイル自体を書き換えたいときは `-i` オプションを使います。# ファイルを直接書き換える(-i オプション) # バックアップなし(注意して使うこと) sed -i 's/oldtext/newtext/g' config.txt # バックアップを.bakとして保存してから書き換える(推奨) sed -i.bak 's/oldtext/newtext/g' config.txt # バックアップファイルが config.txt.bak として作られる
実務でよく使う正規表現パターン集
現場で実際に使う場面別のパターンをまとめます。| やりたいこと | コマンド例 |
|---|---|
| ERRORで始まる行を抽出 | grep '^ERROR' app.log |
| 空白行を除いて表示 | grep -v '^$' file.txt |
| IPアドレスを含む行を検索 | grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' file.txt |
| コメント行(#で始まる)を除いて表示 | grep -v '^#' /etc/hosts |
| errorまたはwarningを含む行を抽出 | grep -E 'error|warning' /var/log/syslog |
| 設定ファイルの文字列を一括置換 | sed -i.bak 's/旧設定/新設定/g' config.conf |
| 行末の不要な空白を削除 | sed -i 's/[[:space:]]*$//' file.txt |
トラブルシュート:よくある間違いと対処法
「.」や「*」が思い通りに動かない
正規表現の `.`(ドット)は「任意の1文字」を意味しますが、ファイルパスの `.`(ピリオド)を検索したいときは `\.` とエスケープする必要があります。# NG: .txt と書くと「何でもいい1文字+txt」にもマッチしてしまう grep '.txt' files.txt # OK: ピリオドそのものを検索したい場合は\でエスケープする grep '\.txt' files.txt
検索パターンに「[」が含まれてエラーになる
角括弧 `[` は正規表現の特殊文字なので、そのまま使うとエラーになります。`\[` とエスケープしてください。# エラーになる例 grep '[Warning' /var/log/syslog # 正しい例(\でエスケープ) grep '\[Warning' /var/log/syslog
BRE(基本正規表現)とERE(拡張正規表現)の違い
grepには「基本正規表現(BRE)」と「拡張正規表現(ERE)」の2種類があります。・grep(デフォルト):BRE。`+` `?` `|` を使うには `\` でエスケープが必要
・grep -E または egrep:ERE。`+` `?` `|` はそのまま使える
# BRE(デフォルト)で「error|warning」を検索する場合(\|と書く) grep 'error\|warning' /var/log/syslog # ERE(-Eオプション)で同じことを検索する場合(こちらが読みやすい) grep -E 'error|warning' /var/log/syslog
本記事のまとめ
正規表現の基本パターンと、grepおよびsedでの使い方をまとめます。| パターン | 意味 |
|---|---|
. |
任意の1文字 |
* |
直前の文字の0回以上の繰り返し |
^ |
行頭 |
$ |
行末 |
[abc] |
a・b・cのどれか1文字 |
[^abc] |
a・b・c以外の1文字 |
+(-Eオプション必須) |
直前の文字の1回以上の繰り返し |
|(-Eオプション必須) |
または(OR条件) |
正規表現をマスターすると、Linuxのテキスト処理の効率が大幅に上がります。次のステップとして、sedやawkを組み合わせた処理に進むと、さらに実務で役立つスキルが身につきます。
無料の「Linuxサーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
正規表現をはじめ、grep・sed・vimなどのコマンドを体系的に学びたい方は、ぜひ受け取ってみてください。
無料マニュアルを受け取る >>
関連記事:コマンドをもっと使いこなすために
正規表現の理解が深まったら、次は以下の記事で関連コマンドをさらに掘り下げてみてください。・grepコマンドで文字列を検索する方法|複数ファイルやディレクトリ除外も
・vi(vim)で文字列を検索・置換する方法|ハイライトの消し方や次への移動も
・findコマンドでファイル・ディレクトリを検索する方法|名前や更新日時で探す
・ファイル内の特定文字から始まる文字列を抽出する
・ファイル内の特定文字で終わる文字列を抽出する
・grepコマンドの検索結果をさらに絞り込む
・sedコマンドでファイル内の文字列を置換する
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 前のページへ:Linux初心者向けインストール基礎知識|ディストロ選定からデュアルブート・仮想環境まで
- この記事の属するカテゴリ:【Linux入門】初心者のための基礎知識・講座へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます