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?.txt
file1.txt
, file2.txt
など、
“file”に続く1文字のファイルを削除します。
3. 特定の文字列で始まるファイルを表示
ls file*.txt
このコマンドは、file
で始まり.txt
で終わる
すべてのファイルをリスト表示します。
4. 特定の2文字のファイルを表示
ls file??.txt
file
に続く2文字が何であっても良いファイル
(例: file01.txt
, fileAB.txt
)を表示します。
5. 特定のディレクトリ内で複数階層のファイルを表示
ls **/*.txt
**
を使って、現在のディレクトリとすべてのサブディレクトリにある.txt
ファイルを表示します。
正規表現とワイルドカードの使い分け
正規表現
- テキスト操作や文字列の詳細なパターンマッチングに最適。
- 複雑なルールを用いて細かく文字列を操作できる。
ワイルドカード
- ファイル名やディレクトリの簡単なパターンマッチングに最適。
- コマンドライン操作で主に使用され、シンプルな検索や操作に役立つ。
まとめ
Linuxで効率的にファイルやテキストを操作するために、正規表現とワイルドカードは非常に重要なツールです。
ワイルドカードはシンプルなファイル操作に使い、正規表現は複雑なパターン検索に最適です。
どちらも使いこなすことで、Linuxでの作業がスムーズかつ効率的になります。