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

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

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

 テキストデータを扱う際、特定のパターンが繰り返される文字列を検索したいことがあります。grepコマンドと正規表現の繰り返しを指定するメタ文字を組み合わせることで、効率的に目的の文字列を抽出できます。ここでは、繰り返しを表すメタ文字とその活用方法について解説します。

grepコマンドの概要

 grep(Global Regular Expression Print)は、指定したパターンにマッチする行を検索し、表示するコマンドです。正規表現を使用することで、単純な文字列検索よりも高度なパターンマッチングが可能になります。

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

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

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

 次に、繰り返しを表すメタ文字を紹介します。これは他の正規表現の後に置いて、直前の正規表現が一定回数繰り返されることを意味します。単独で使うのではなく、必ず直前の文字や正規表現に続けて使用する点に注意してください。

テキストファイルの作成

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

user01@ubuntu:~$ nano example.txt

example.txtの内容

Cl
Col
Cool
Cooool
Coooooool
Coil
Coal
Call
Cell
Curl
Cowl
Bol
ex.txt
ex1txt
ex22txt
ex333txt
ex_endtxt

メタ文字 * の意味

  • *(アスタリスク):直前の文字や正規表現が0回以上繰り返されることを表します。
  • 0回の繰り返し:直前の文字が存在しなくても良い。
  • 1回以上の繰り返し:直前の文字が1回以上繰り返される。

メタ文字 * による繰り返しの例

パターン: Co*l

0回の繰り返し

Cl

1回の繰り返し

Col

2回以上の繰り返し

Cool
Cooool
Coooooool

使用例:Co*l の検索

user01@ubuntu:~$ grep 'Co*l' example.txt
Cl
Col
Cool
Cooool
Coooooool

解説

  • パターン 'Co*l' は、C の後に o が0回以上繰り返され、最後に l が続く文字列にマッチします。
  • Clo が0回(存在しない)
  • Colo が1回
  • CoolCoooolCooooooolo が2回以上

マッチしない例

  • CoilCoal は、o の後に別の文字が続くためマッチしません。

メタ文字と他の正規表現の組み合わせ

[ ]* の組み合わせ

 * の直前には、通常の文字だけでなくメタ文字も使用できます。例えば、[oi]* と書くと、o または i が0回以上繰り返されることを意味します。

使用例:^C[oi]*l$ の検索

user01@ubuntu:~$ grep '^C[oi]*l$' example.txt
Cl
Col
Cool
Cooool
Coooooool
Coil

解説

  • パターン '^C[oi]*l$' は、行の先頭 ^C、続いて o または i が0回以上 [oi]*、最後に l で終わる $ 行を検索します。
  • マッチする行
    Cl[oi]* が0回繰り返し。
    ColCoolCoooolCooooooolCoil[oi]* が1回以上繰り返し。

マッチしない例

  • Coalo の後に a が続くためマッチしません。

.(ドット)と * の組み合わせ

.(ドット)は任意の1文字を表します。これと * を組み合わせた .* は、任意の文字が0回以上繰り返されることを意味します。

使用例:^ex.*txt$ の検索

user01@ubuntu:~$ grep '^ex.*txt$' example.txt
ex.txt
ex1txt
ex22txt
ex333txt
ex_endtxt

解説

  • パターン '^ex.*txt$' は、行の先頭 ^ex、任意の文字列 .* が0回以上、最後に txt で終わる $ 行を検索します。
  • マッチする行
    ex.txtex1txtex22txtex333txtex_endtxt.* が1文字以上

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

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

user01@ubuntu:~$ rm example.txt

まとめ

*(アスタリスク)メタ文字

  • 直前の文字や正規表現が0回以上繰り返されることを表す。
  • 単独で使わず、直前の文字や正規表現に続けて使用する。

使用例

  • 'Co*l'C の後に o が0回以上、最後に l
    ・マッチ:ClColCoolCooool など
    ・非マッチ:CoilCoal
  • '^[oi]*l$':行の先頭から o または i が0回以上、最後に l
    ・マッチ:ClOlIl
  • 'ex.*txt'ex で始まり、任意の文字列が0回以上、txt で終わる。
    ・マッチ:ex.txtex1txtex_endtxt など

注意点

  • メタ文字は正規表現の強力なツールであり、正しく使用することで効率的な検索が可能。
  • * の直前にメタ文字を使用することで、より柔軟なパターンを指定できる。

 繰り返しを指定するメタ文字を理解し、grep コマンドと組み合わせて活用することで、テキストデータの検索・抽出作業が大幅に効率化されます。正規表現の基礎をしっかりと身につけ、実践に役立ててください。

 *以外にも、繰り返し回数を指定するメタ文字があり、これらは拡張正規表現により定義されています。拡張正規表現については、次のコンテンツで解説していきます。