このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Linuxコマンドの基本:その他のメタ文字とgrepコマンド
その他のメタ文字とgrepコマンド
テキスト処理において、grep
コマンドと正規表現を組み合わせることで、特定のパターンを効率的に検索することができます。これまで紹介してきたメタ文字以外にも、正規表現には便利なメタ文字があります。ここでは、その他のメタ文字である ()
と |
を使用した検索方法について解説します。
grep
コマンドの概要
grep
(Global Regular Expression Print)は、指定したパターンにマッチする行を検索し表示するためのコマンドです。正規表現を活用することで、複雑なパターンマッチングが可能となります。
【書式】grep [オプション] '<検索パターン>' <ファイル名>
[オプション]
:コマンドの動作を変更するためのオプション。'<検索パターン>'
:検索したい正規表現パターン(シングルクォートで囲む)。<ファイル名>
:検索対象のファイル名。
テキストファイルの作成
以下の検索例で使用するテキストファイル example.txt
を作成します。
user01@ubuntu:~$ nano example.txt
example.txt
の内容
Cl
Col
Cool
Coool
Cooool
Coooooool
CoolCool
CoolCoolCool
Coil
Coal
Call
Cell
Hot
HotHot
HotHotHot
Japan Cool
Japan Hot
その他のメタ文字
括弧 ()
の利用
()
は、正規表現をグループ化するためのメタ文字です。このメタ文字を使用することで、複数の文字やパターンを一つの単位として扱うことができます。ただし、()
は基本正規表現と拡張正規表現で記述方法が異なるため、ここでは拡張正規表現で説明します。
使用例:単語の繰り返しを検索
例えば、「Cool」という単語を2回以上繰り返した「CoolCool」「CoolCoolCool」などの文字列にマッチさせたい場合を考えます。このとき、繰り返し回数を指定するメタ文字 {2,}
を利用して Cool{2,}
という検索パターンを指定しても、{2,}
は直前の1文字(この場合は「l」)にしか作用しないため、期待する結果は得られません。
この問題を解決するために、()
を使って「Cool」をグループ化し、(Cool){2,}
と指定します。これにより、「Cool」という単語自体の繰り返しに対して回数指定が適用されます。
誤った例:Cool{2,}
を使った検索
user01@ubuntu:~$ grep -E 'Cool{2,}' example.txt
(何も検索されない)
解説
Cool{2,}
はCoo
+l
が2回以上 というパターンになる。
この問題を解決するために、()
を使って「Cool」をグループ化し、(Cool){2,}
と指定します。これにより、「Cool」という単語自体の繰り返しに対して回数指定が適用されます。
正しい例:(Cool){2,}を
使った検索
user01@ubuntu:~$ grep -E '(Cool){2,}' example.txt
CoolCool
CoolCoolCool
解説
(Cool){2,}
はCool
というグループが2回以上繰り返されるパターン。- これにより、「CoolCool」や「CoolCoolCool」にマッチします。
パイプ |
の利用
|
は、複数の正規表現をOR(または)条件でつなげるためのメタ文字です。これを使用することで、複数のパターンのいずれかにマッチする文字列を検索できます。|
も基本正規表現では使用できないため、拡張正規表現での説明となります。
使用例:複数のパターンを検索
例えば、abc|xyz
という正規表現は、「abc」または「xyz」という文字列にマッチします。複数のパターンを指定する場合も同様に、abc|def|xyz
と記述すれば、「abc」、「def」、「xyz」のいずれかにマッチします。
|
は多くの場合、()
と組み合わせて使用します。例えば、次のように Japan (Cool|Hot)
という検索パターンを指定することで、「Japan Cool」または「Japan Hot」にマッチさせることができます。
例:'Cool|Hot'
user01@ubuntu:~$ grep -E 'Cool|Hot' example.txt
Cool
CoolCool
CoolCoolCool
Hot
HotHot
HotHotHot
Japan Cool
Japan Hot
解説
grep -E 'Cool|Hot'
は、「Cool」または「Hot」にマッチする行をすべて表示します。
使用例:グループ化と組み合わせた検索
例えばば、「Japan Cool」または「Japan Hot」にマッチさせたい場合は、次のように指定します。
例:'Japan (Cool|Hot)'
user01@ubuntu:~$ grep -E 'Japan (Cool|Hot)' example.txt
Japan Cool
Japan Hot
解説
'Japan (Cool|Hot)'
は、「Japan 」に続いて「Cool」または「Hot」が続くパターン。()
でグループ化し、|
で OR 条件を指定。
不要なファイルの削除
作業が完了したら、作成したファイルを削除します。
user01@ubuntu:~$ rm example.txt
その他のメタ文字のまとめ
これらの正規表現を以下の表にまとめます。
基本正規表現 | 拡張正規表現 | 意味 |
---|---|---|
\(\) | () | グループ化する |
なし | | | 複数の正規表現を OR 条件で連結する |
注意点
- 基本正規表現でのグループ化
・基本正規表現で()
を使用する場合は、エスケープ文字 \ が必要です。例:\(\) - 基本正規表現では
|
は使用できません。
まとめ
()
メタ文字
・正規表現をグループ化し、単位として扱うことができる。
・グループ全体に対して繰り返しや他のメタ文字を適用可能。|
メタ文字
・複数のパターンを OR 条件で連結し、いずれかにマッチする文字列を検索できる。
・多くの場合、()
と組み合わせて使用する。- 拡張正規表現の使用
・これらのメタ文字は拡張正規表現でのみ使用可能。
・grep
コマンドで拡張正規表現を使用する際は、-E
オプションを付ける。
活用例
- 繰り返しのグループ化
・(Cool){2,}
:Cool
という単語が2回以上繰り返されるパターン。 - 複数パターンの検索
・Japan (Cool|Hot)
:Japan Cool
またはJapan Hot
にマッチ。
これらのメタ文字を理解し活用することで、grep
コマンドによるテキスト検索がさらに強力になります。正規表現の知識を深め、効率的なテキスト処理を行いましょう。