Linuxでファイル検索やテキスト操作を行う際、正規表現とワイルドカードは非常に役立つツールです。
これらはパターンマッチングに用いられますが、機能や使い方に違いがあります。
この記事では、正規表現とワイルドカードの違いや基本的な使い方を詳しく解説し、初心者でも理解できるようにします。
正規表現とワイルドカードの違い
正規表現
正規表現は、テキスト検索や文字列の操作に使われる高度なパターンマッチング手法です。
複雑な条件に基づいて文字列を検索することができます。
正規表現は、特定のパターンや文字列のセットを指定するために用いられる、
より詳細で強力なツールです。以下のように使用できます。
正規表現の例:
- .:任意の1文字
- ^abc:abcで始まる文字列
- [A-Za-z]:アルファベット1文字
grep '^hello' file.txtこの例では、ファイル内で “hello” で始まる行を検索します。
ワイルドカード
ワイルドカードは、ファイル名やディレクトリ名のパターンを指定して、
シンプルに検索や操作を行うために使われます。lsやfindなどのコマンドと組み合わせて使用することが多いです。
ワイルドカードの例:
- *:任意の文字列
- ?:任意の1文字
- [abc]:a、b、またはcのいずれか
ls *.txtこのコマンドでは、カレントディレクトリ内のすべての.txtファイルをリスト表示します。

正規表現とワイルドカードの一覧表
以下の図は、正規表現とワイルドカードの主要なパターンを一覧にしたものです。
| 正規表現 | 説明 | ワイルドカード | 説明 | 
|---|---|---|---|
| . | 任意の1文字 | * | 0文字以上の任意の文字列 | 
| ^ | 行の先頭を指定 | ? | 任意の1文字 | 
| $ | 行の末尾を指定 | [abc] | a, b, cのいずれか | 
| [ ] | 指定した文字のいずれか | [!abc] | a、b、c以外の任意の1文字 | 
| [^ ] | 指定した文字以外の任意の1文字 | {a,b} | aかbのどちらか | 
| ( ) | グループ化して、その部分をキャプチャ | {a,b,c} | aかbかcのどれか | 
| * | 直前の文字が0回以上繰り返される | ** | 任意の階層のディレクトリやファイル | 
| + | 直前の文字が1回以上繰り返される | ||
| ? | 直前の文字が0回または1回現れる | ||
| {n} | 直前の文字がn回繰り返される | ||
| {n,m} | 直前の文字がn回以上m回以下繰り返される | ||
| \ | 特殊文字のエスケープ | ||
| ` | ` | OR条件(AまたはB) | |
| \b | 単語境界を示す | 
正規表現を使った実践的な例
1. ファイル内の特定のパターンを検索
grep -E '^[A-Za-z]{5,}' file.txtこのコマンドでは、5文字以上の英字で始まる行をfile.txtから検索します。grepの-Eオプションは拡張正規表現を利用するために使われます。
2. テキストファイル内で複数の単語を検索
grep -E '(dog|cat)' animals.txtここでは、animals.txt内で
「dog」か「cat」のいずれかが含まれる行を検索します。
3. 特定の拡張子を持つファイルを検索
grep -E '\.txt$' filelist.txtファイル名が.txtで終わる行をfilelist.txtから検索します。$を使って行の末尾を指定しています。/を.の前に使用することにより.を文字として認識させています。
4. 複数の文字パターンを検索
grep -E '(dog|cat|bird)' animals.txtこのコマンドはanimals.txt内で
「dog」、「cat」、または「bird」を含む行を検索します。
5. 数字だけを含む行を検索
grep -E '^[0-9]+$' numbers.txtこの例では、numbers.txt内で数字だけを含む行を検索します。
ワイルドカードを使った実践的な例
1. 特定の拡張子を持つファイルの一覧表示
ls *.logこのコマンドは、カレントディレクトリ内で.log拡張子を持つ全ファイルを表示します。
2. 特定の名前パターンを持つファイルの削除
rm file?.txtfile1.txt, file2.txtなど、
“file”に続く1文字のファイルを削除します。
3. 特定の文字列で始まるファイルを表示
ls file*.txtこのコマンドは、fileで始まり.txtで終わる
すべてのファイルをリスト表示します。
4. 特定の2文字のファイルを表示
ls file??.txtfileに続く2文字が何であっても良いファイル
(例: file01.txt, fileAB.txt)を表示します。
5. 特定のディレクトリ内で複数階層のファイルを表示
ls **/*.txt**を使って、現在のディレクトリとすべてのサブディレクトリにある.txtファイルを表示します。
正規表現とワイルドカードの使い分け
正規表現
- テキスト操作や文字列の詳細なパターンマッチングに最適。
- 複雑なルールを用いて細かく文字列を操作できる。
ワイルドカード
- ファイル名やディレクトリの簡単なパターンマッチングに最適。
- コマンドライン操作で主に使用され、シンプルな検索や操作に役立つ。
まとめ
Linuxで効率的にファイルやテキストを操作するために、正規表現とワイルドカードは非常に重要なツールです。
ワイルドカードはシンプルなファイル操作に使い、正規表現は複雑なパターン検索に最適です。
どちらも使いこなすことで、Linuxでの作業がスムーズかつ効率的になります。

