メタキャラクタとは
メタキャラクタとは、ファイル名のパターンを表す特殊な記号のこと。ファイルを検索するときに役立つシェルがメタキャラクタです。
メタキャラクタを使うと、パターンに一致する複数のファイルを一括して扱えます。例えば、カレントディレクトリ内に以下の6つのファイルがある場合
$ ls
a.tax aaa b.txt bbb c.txt ccc
この場合「a.txt b.txt c .txt」は「*.txt」で表せます。「a*」は「a.txt aaa」を表します。
メタキャラクタを、通常の文字として使いたい場合は、メタキャラクタの直前に「\(バックスラッシュ)」を記述することで、メタキャラクタの意味を打ち消します。
例えば「*」なら「*(アスタリスク)」を文字として扱います。
シェルのメタキャラクタ
シェルのメタキャラクタは、シェルによって展開されてからコマンドに渡されます。
例えば「ls *.txt」というコマンドを実行すると、シェルはカレントディレクトリ内からファイル名が「.txt」で終わるファイルを探し出し、「ls a.txt b.txt c.txt」のように展開してからlsコマンドを実行します。
lsコマンドがメタキャラクタを解釈しているわけではないことに注意しましょう。
主なメタキャラクタ
*
0文字以上の文字にまたは文字列にマッチする。例えば「a*」は、a、ab、abc、aaaaのすべてにマッチする。0文字にもマッチするので注意。
?
任意の1文字にマッチする。例えば「a?」は、aa、ab、a1などにマッチする。a、abcにはマッチしない。
[]
[]内に列挙されている文字のいずれかにマッチする。例えば「a[bcd]」は、ab、ac、adのいづれかにマッチする。abc、abcdにはマッチしない。
0から9まで~のように連続する文字列を設定したい場合「-」が使える。[a-z]はアルファベットの小文字にマッチする。「0-9」は数字すべてにマッチする。
イコール[0-9]と[0123456789]は同じ意味になるということ。
「!」を範囲指定の先頭に使うと、マッチしない範囲を指定できる。つまりa[!bcd]はaa、a1にはマッチするが、ab、ac、adにはマッチしない。
{}
「,」で区切られた文字列にマッチする。文字列の生成にも利用できる。例えば「test{1,2}」は、test1、test2を生成する。