新Linux入門|正規表現を理解しよう!文字列パターンとメタキャラクタの基本

 Linuxでテキストを扱う際、「特定の文字列を探したい」「条件に合う行だけ抽出したい」といった場面はよくあります。
そんなときに大活躍するのが 正規表現(Regular Expression) です。

正規表現とは、文字列のパターン(規則)を表現するための特別な記法のことで、
grepやsed、awkなどのコマンドで頻繁に使われます。
ファイルの検索、ログの分析、テキスト置換など、システム管理者にとって欠かせない知識です。

 ここでは、正規表現の基本的な考え方と、よく使われるメタキャラクタ(特殊記号)についてわかりやすく解説します。

🧩 正規表現とは?

正規表現(Regular Expression)は、
「あるルールに合った文字列」を柔軟に検索・抽出するためのパターン表現です。

例えば、次のような用途で使われます。

目的
特定の単語を含む行を抽出したいgrep "error" logfile.txt
数字で始まる行を探したいgrep "^[0-9]" data.txt
拡張子が .txt のファイル名を探したいgrep "\.txt$" filelist.txt

💬 正規表現を理解しておくと、grepコマンド一つで強力な検索が可能になります。

🔣 正規表現の主なメタキャラクタ

正規表現には、特別な意味を持つ文字(メタキャラクタ)がいくつかあります。
これらを組み合わせることで、複雑なパターンを表現できます。

メタキャラクタ説明
.任意の1文字にマッチする。
*直前のパターンが0回以上繰り返すものにマッチ。
+直前のパターンが1回以上繰り返すものにマッチ(拡張正規表現)。
?直前のパターンが0回または1回現れるものにマッチ(拡張正規表現)。
^行の先頭にマッチする。
$行の末尾にマッチする。
[]角括弧内のいずれか1文字にマッチする。例:[abc] は a, b, c のいずれか。
()グループ化を行う。繰り返しや参照に使うことができる。
\エスケープ文字。特殊文字を通常の文字として扱う。

💡 + と ? は 拡張正規表現 なので、grep で使う際は -E オプション を付ける必要があります。
(例:grep -E "a+b")

💡 正規表現の具体例

パターンマッチする文字列の例説明
ab*a, ab, abb, abbb...bが0回以上繰り返す。
a+bab, aab, aaab...aが1回以上繰り返す(拡張)。
a?bab, baが0回または1回のときにbにマッチ(拡張)。
.*任意の文字が0文字以上続く。
^start行頭がstartで始まる。
end$行末がendで終わる。
[aeiou]母音のいずれか(a, e, i, o, u)。
(abc)+abcが1回以上繰り返す。
[A-Z]AからZまでの大文字アルファベット。
[0-9][0-9]2桁の数字。
.txt$拡張子が.txtで終わる文字列。

💬 たとえば grep "^[A-Z]" とすれば、行の先頭が大文字で始まる行を簡単に抽出できます。

🧪 grepコマンドでの使用例

grep は正規表現を利用できる代表的なコマンドです。

① ファイル内で「error」を含む行を検索

[suzuki@AlmaLinux ~]$sudo grep "error" /var/log/messages
Oct 27 10:35:12 AlmaLinux systemd[1]: error: failed to start service.

② 拡張正規表現で「a」が1回以上続く行を検索

[suzuki@AlmaLinux ~]$ grep -E "a+" sample.txt
aaaaa
banana

③ 「.txt」で終わる行を検索

[suzuki@AlmaLinux ~]$ grep "\.txt$" filelist.txt
report.txt
memo.txt

💬 \. はドットをそのまま「.」として扱うためにエスケープしています。

⚙️ シェルのメタキャラクタとの違い

正規表現とよく混同されるのが、シェルのワイルドカード(メタキャラクタ)です。
実際には用途も挙動も異なります。

区別シェルのメタキャラクタ正規表現
使用場所ファイル名展開、コマンドライン操作grep, sed, awk, vimなど
* の意味任意の文字列(0文字以上)直前のパターンの0回以上繰り返し
? の意味任意の1文字直前のパターンの0回または1回(拡張)
[ ]文字セットを表す(同じ)同じ意味で使用される

💬 たとえばシェルの ls *.txt は「.txtで終わるファイル名」を探しますが、
正規表現の \.txt$ は「行末が .txt で終わる文字列」を探す違いがあります。

✅ まとめ

  • 正規表現は、文字列のパターンを表す強力な仕組み。
  • grepsedawkなど多くのLinuxツールで使用可能。
  • メタキャラクタを組み合わせることで、柔軟かつ強力な文字列検索ができる。
  • シェルのワイルドカードとは意味が異なるため、混同しないよう注意。

💬 正規表現をマスターすれば、ログ解析やテキスト処理がグッと効率的になります。
次にgrepコマンドなどで実際にパターンマッチングを体験してみましょう!