このページで解説している内容は、以下の 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
解説
table
とstable
がt
+a
(任意の1文字) +b
(任意の1文字) +le
に分解され、パターンにマッチします。
注意点:.
は全ての文字にマッチする
.
(ドット)はアルファベットや数字だけでなく、記号やドットそのものも含めた任意の1文字にマッチします。例えば、.org
というパターンで検索すると次のようになります。
user01@ubuntu:~$ grep '.org' example.txt
borg
.org
解説
borg
のb
、および.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
解説
tale
とtele
がパターンにマッチします。
使用例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
に続く文字が1
と3
以外のものにマッチします。
不要となったファイルの削除
user01@ubuntu:~$ rm example.txt
メタ文字のまとめ
メタ文字 | 意味 |
---|---|
. | 任意の1文字にマッチ |
[ ] | [] の中に含まれる、いずれかの1文字にマッチ |
[^ ] | [] の中に含まれない、いずれかの1文字にマッチ |
\ | 直後のメタ文字の意味を打ち消す(エスケープ) |
まとめ
正規表現のメタ文字を活用することで、grep
コマンドで複雑なパターンの検索が可能になります。.
や [ ]
、^
、\ などのメタ文字を理解し、適切に使用することで、効率的に必要な情報を抽出できます。
.
(ドット):任意の1文字にマッチ[ ]
(角括弧):括弧内のいずれかの1文字にマッチ[^ ]
(否定の角括弧):括弧内に含まれない任意の1文字にマッチ- \(バックスラッシュ):メタ文字の意味を無効化(エスケープ)
これらのメタ文字を組み合わせて、目的に合ったパターンを作成し、効率的なテキスト検索を行いましょう。