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

Linuxコマンドの基本:繰り返し回数を指定するメタ文字とgrepコマンド

繰り返し回数を指定するメタ文字とgrepコマンド

 テキスト処理において、特定のパターンが特定の回数繰り返される文字列を検索したい場合があります。grepコマンドと正規表現の繰り返し回数を指定するメタ文字を組み合わせることで、より詳細な検索が可能になります。ここでは、grepコマンドの概要と、繰り返し回数を指定するメタ文字について解説します。

grepコマンドの概要

 grep(Global Regular Expression Print)は、指定したパターンに一致する行を検索し表示するためのコマンドです。正規表現を使用することで、複雑なパターンマッチングが可能になります。

【書式】
grep [オプション] '<検索パターン>' <ファイル名>

  • [オプション]:grepコマンドの動作を変更するためのオプション。
  • '<検索パターン>':検索したい正規表現パターン(シングルクォートで囲む)。
  • <ファイル名>:検索対象のファイル名。

繰り返し回数の指定をするメタ文字

 これまで紹介した * などのメタ文字では、細かい繰り返し回数の指定はできませんでした。回数を数値で指定したい場合には、{} というメタ文字を利用します。これは基本正規表現と拡張正規表現で記述方法が異なるため、ここでは拡張正規表現で紹介します。

  • {m,n}:直前の文字や正規表現が m回以上n回以下 繰り返されることを意味します。
  • {m}:直前の文字や正規表現が ちょうどm回 繰り返されることを意味します。
  • {m,}:直前の文字や正規表現が m回以上 繰り返されることを意味します。

テキストファイルの作成

以下の検索例で使用するテキストファイル example.txt を作成します。

user01@ubuntu:~$ nano example.txt

example.txt の内容

Cl
Col
Cool
Coool
Cooool
Coooooool
CoolCool
CoolCoolCool
Coil
Coal
Call
Cell
Curl
Cowl
Bol
LinuxLinux
Linux Linux
100-1234
200-3456
345-6789

繰り返し回数の指定の使用例

{m,n} の使用例

{m,n} は、直前の文字が m回以上n回以下 繰り返されることを意味します。

例:Co{1,2}l

  • o が1回以上2回以下繰り返されるパターンを検索します。
user01@ubuntu:~$ grep -E 'Co{1,2}l' example.txt
Col
Cool
CoolCool
CoolCoolCool

解説

  • Colo が1回
  • CoolCoolCoolCoolCoolCoolo が2回

{m} の使用例

{m} は、直前の文字が ちょうどm回 繰り返されることを意味します。

例:Co{2}l

  • o がちょうど2回繰り返されるパターンを検索します。
user01@ubuntu:~$ grep -E 'Co{2}l' example.txt
Cool
CoolCool
CoolCoolCool

解説

  • CoolCoolCoolCoolCoolCoolo が2回

{m,} の使用例

{m,} は、直前の文字が m回以上 繰り返されることを意味します。

例:Co{4,}l

  • o が4回以上繰り返されるパターンを検索します。
user01@ubuntu:~$ grep -E 'Co{4,}l' example.txt
Cooool
Coooooool

解説

  • Coooolo が4回
  • Cooooooolo が7回

応用例:郵便番号の検索

 数字の桁数チェックなどに用いることができます。日本の郵便番号は「3桁-4桁」ですから、[0-9]{3}-[0-9]{4} という正規表現で郵便番号にマッチします。

user01@ubuntu:~$ grep -E '[0-9]{3}-[0-9]{4}' example.txt
100-1234
200-3456
345-6789

不要なファイルの削除

作業が完了したら、作成したファイルを削除します。

user01@ubuntu:~$ rm example.txt

繰り返しを指定するメタ文字のまとめ

 繰り返し回数を指定するメタ文字を以下にまとめます。{} を基本正規表現で使用する際には、エスケープが必要なことに注意してください。

基本正規表現拡張正規表現意味
**0回以上の繰り返し
なし+1回以上の繰り返し
なし?0回または1回の繰り返し
\{m,n\}{m,n}m回以上n回以下の繰り返し
\{m\}{m}ちょうどm回の繰り返し
\{m,\}{m,}m回以上の繰り返し
繰り返しを指定するメタ文字

注意

  • 上記の表では、+? は基本正規表現では使用できません。GNU grep ではエスケープして使用できますが、他の環境との互換性を考慮して「なし」としています。

まとめ

  • 繰り返し回数を指定するメタ文字を使用することで、特定の繰り返し回数を持つパターンを検索できます。
  • grep コマンドで拡張正規表現を使用する場合は、-E オプションを付けて明示的に指定します。
  • {} を用いた繰り返し回数の指定は、数字の桁数チェックなど実用的な用途にも活用できます。
  • 基本正規表現と拡張正規表現では、メタ文字の扱いが異なるため、適切に使い分けることが重要です。