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

Linuxコマンドの基本:文字にマッチするメタ文字とgrepコマンド

文字にマッチするメタ文字とgrepコマンド

 テキストデータの検索において、特定のパターンに一致する文字列を効率的に抽出するために、grepコマンド正規表現を組み合わせて使用します。ここでは、文字にマッチするメタ文字とgrepコマンドの使い方について詳しく解説します。

grepコマンドの概要

 grepコマンドは、指定したパターンに一致する行を検索し表示するためのコマンドです。正規表現を利用することで、単純な文字列検索では難しい複雑なパターンの検索も可能になります。

任意の1文字にマッチするメタ文字:.(ドット)

 正規表現でよく使われるメタ文字の一つに、.(ドット)があります。これは任意の1文字にマッチします。

使用例

 以下のgrepコマンドの使用例でマッチする文字列が含まれるテキストファイル example.txt があるとします。

user01@ubuntu:~$ nano example.txt

example.txtの内容

apple
ample
maple
table
cable
stable
enable
liable
global
portal
leacom
le1com
le_com
le.com
leXcom
borg
.org
tale
tele
mail1
mail2
mail3
mail4
mail5
mail6

パターン1:le.comを検索

 「leの後ろに任意の1文字が続き、その後にcomという文字列が来る」パターンを検索します。.(ドット)は任意の1文字にマッチするため、次のように検索します。

user01@ubuntu:~$ grep 'le.com' example.txt
leacom
le1com
le_com
le.com
leXcom

解説

  • パターン 'le.com'le + 任意の1文字 + com という構成です。
  • leacom, le1com, le_com, le.com, leXcom がマッチします。

パターン2:t..leを検索

 メタ文字は連続して使用できます。t..le と書くと、「t + 任意の2文字 + le」というパターンになります。

user01@ubuntu:~$ grep 't..le' example.txt
table
stable

解説

  • tablestablet + a (任意の1文字) + b (任意の1文字) + le に分解され、パターンにマッチします。

注意点:. は全ての文字にマッチする

 .(ドット)はアルファベットや数字だけでなく、記号やドットそのものも含めた任意の1文字にマッチします。例えば、.org というパターンで検索すると次のようになります。

user01@ubuntu:~$ grep '.org' example.txt
borg
.org

解説

  • borgb、および .org. が任意の1文字としてマッチします。

メタ文字をエスケープする:\(\)

 .(ドット)そのものを検索したい場合は、メタ文字の意味を打ち消すためにエスケープ文字 \(バックスラッシュ)を使用します。

user01@ubuntu:~$ grep '\.org' example.txt
.org

解説

  • パターン '\.org'. をメタ文字ではなく文字そのものとして扱います。
  • これにより、.org のみがマッチし、borg はマッチしません。

特定の文字を指定する:[ ]

 任意の1文字ではなく、特定の文字にマッチさせたい場合は、[ ](角括弧)を使用します。これは「括弧内のいずれかの1文字」にマッチします。

使用例1:t[ae]leを検索

t[ae]le と書くと、「t + aまたはe + le」というパターンになります。

user01@ubuntu:~$ grep 't[ae]le' example.txt
tale
tele

解説

  • taletele がパターンにマッチします。

使用例2:文字の範囲を指定する

アルファベットの範囲を指定したい場合、ハイフン - を利用して簡潔に表現できます。

  • [a-k]aからkまでのいずれかの文字
  • [a-zA-Z]:アルファベットの大文字小文字すべて

例:mail[1-5]を検索

user01@ubuntu:~$ grep 'mail[1-5]' example.txt
mail1
mail2
mail3
mail4
mail5

解説

  • mail に続く 1 から 5 の数字にマッチします。

使用例3:指定した文字以外にマッチさせる

[ ] 内の先頭に ^ を置くと、「括弧内に含まれない任意の1文字」にマッチします。

例:mail[^13]を検索

user01@ubuntu:~$ grep 'mail[^13]' example.txt
mail2
mail4
mail5
mail6

解説

  • mail に続く文字が 13 以外のものにマッチします。

不要となったファイルの削除

user01@ubuntu:~$ rm example.txt

メタ文字のまとめ

メタ文字意味
.任意の1文字にマッチ
[ ][] の中に含まれる、いずれかの1文字にマッチ
[^ ][] の中に含まれない、いずれかの1文字にマッチ
\直後のメタ文字の意味を打ち消す(エスケープ)
メタ文字のまとめ

まとめ

 正規表現のメタ文字を活用することで、grep コマンドで複雑なパターンの検索が可能になります。.[ ]^、\ などのメタ文字を理解し、適切に使用することで、効率的に必要な情報を抽出できます。

  • .(ドット):任意の1文字にマッチ
  • [ ](角括弧):括弧内のいずれかの1文字にマッチ
  • [^ ](否定の角括弧):括弧内に含まれない任意の1文字にマッチ
  • \(バックスラッシュ):メタ文字の意味を無効化(エスケープ)

 これらのメタ文字を組み合わせて、目的に合ったパターンを作成し、効率的なテキスト検索を行いましょう。