このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Linux基礎:正規表現

正規表現

 Linux ではテキスト処理を効率的に行うために、正規表現(Regular Expression) という強力な仕組みが用意されています。正規表現は「文字列のパターン」を記述する方法で、単なる文字列検索だけではなく、複雑な条件での検索や抽出を可能にします。

 特に grep コマンド は代表的なツールであり、ファイルや標準入力から文字列を検索するときに正規表現を活用できます。正規表現を習得すれば、設定ファイルやログの解析など、日常のシステム管理作業が格段に効率化されます。

ここでは、正規表現の基礎と、それを活用する grep コマンドについて詳しく解説します。

1.正規表現の基本

1.1. 正規表現とは

 正規表現は文字列をパターンとして表現する方法であり、単純なキーワード検索よりも柔軟にテキストを扱えます。例えば「エラーで始まる行」や「2桁の数字が含まれる行」などを簡潔に表すことができます。

1.2. 主なメタキャラクタ

正規表現でよく使われるメタキャラクタを表にまとめます。

メタキャラクタ説明
.任意の1文字にマッチ
*直前の文字の0回以上の繰り返しにマッチ
?直前の文字の0回または1回にマッチ(拡張正規表現
+直前の文字の1回以上にマッチ(拡張正規表現
[ ]中のいずれか1文字にマッチ(例: [A-Z] は大文字1文字)
^行頭にマッチ(先頭に置いた場合のみ)
$行末にマッチ(最後に置いた場合のみ)
\直後のメタキャラクタの特殊な意味を無効化

※シェルのメタキャラクタ(*, ?, [] など)と混同しないよう注意が必要です。

2.正規表現の例

2.1. 基本的なパターン

正規表現マッチする例マッチしない例
a.cabc, a1cac, Abc
.*空文字列, abc123 など任意の文字列-
[0-9][0-9]12, 451, abc
^##include, #testtest#
^$空行文字が含まれる行
\{n\}直前の文字のn個の繰り返しに一致
friends?friend, friendsfri
123+123, 123312
[0-9]\{3\}123, 456(3桁の数字)12, 1234

2.2. 応用例

  • ^[A-Z].* … 行頭が大文字で始まる行
  • [a-z]+@example\.com … example.com ドメインのメールアドレス

3.grep コマンドと正規表現

3.1. grep コマンドの概要

 grep はテキストファイルや標準入力から、指定したパターンにマッチする行を抽出するコマンドです。正規表現を利用することで高度な検索が可能になります。

書式

grep [オプション] パターン [ファイル]

3.2. 主なオプション

オプション説明
-i大文字小文字を区別せず検索
-vマッチしない行を表示
-n行番号を表示
-E拡張正規表現を使用
-rディレクトリを再帰的に検索

3.3. 使用例

例: /etc/passwd から "tanaka" を含む行を検索

[user@rocky9 ~]$ grep 'tanaka' /etc/passwd
tanaka:x:1001:1001::/home/tanaka:/bin/zsh

例: カレントディレクトリ以下の .log ファイルから 3桁の数字を含む行を検索

[user@rocky9 ~]$ grep -E '[0-9]{3}' *.log
sysinfo.log:2025年  9月  5日 金曜日 22:47:50 JST
sysinfo.log:Mem:           1.7Gi       1.3Gi       214Mi        19Mi       425Mi       471Mi
sysinfo.log:2025年  9月  6日 土曜日 00:43:38 JST
sysinfo.log:Mem:           1.7Gi       1.4Gi        79Mi        19Mi       474Mi       373Mi

まとめ

  • 正規表現は文字列パターンを表現する方法であり、テキスト処理の基盤となる。
  • .* などのメタキャラクタを組み合わせることで、柔軟に文字列検索が可能。
  • grep コマンドは正規表現を利用でき、ログ解析や設定ファイルの確認などに幅広く活用される。
  • 基本正規表現と拡張正規表現を適切に使い分けることで、より強力な検索が可能になる。