今回はLinuxでよく用いられるワイルドカードと正規表現について説明しようと思います。
ワイルドカードと正規表現は両方とも「文字列の集合を一つの文字列で表現する方法」となります。
使用する文字が似ていますが、仕様が異なっている部分もありますので下記に比較表を貼ります。
上記にあるワイルドカードや正規表現を用いることによって、
自分の検索したいファイル名やディレクトリ名、あるいはファイル内の文字列を検索しやすくなります。
例えば下記のようにlsコマンドを使用して、カレントディレクトリ内のファイルを表示します。
[MSI@localhost ~]ls
a.txt abc.txt abbc.txt bcca.txt log.txt temp alarm.txt
次に下記のようにコマンドを打つとaから始まり、txtで終わるファイル名のみを表示することができます。
[MSI@localhost ~]ls a*txt
a.txt abc.txt abbc.txt alarm.txt
ここで使用したのは、ワイルドカードによる文字列検索です。
正規表現を使用する場合は、下記のgrepコマンドを使用します。
[MSI@localhost ~]ls | grep 'a.*txt'
a.txt abc.txt abbc.txt alarm.txt
このコマンドでは|(パイプライン)を使用して、lsコマンドの出力をgrepコマンドに渡して、aから始まり、txtで終わるファイル名を検索することができます。
ここで注意しておきたいのが、正規表現を用いた文字列パターンを'(シングルクォーテーション)で囲っておくという点です。
'(シングルクォーテーション)で囲っておかないと、grepコマンドが正規表現として解釈する前にシェルがワイルドカードとして解釈し、下記のようにa.*txtが展開される可能性があるからです。
grep a.txt
↑このコマンド展開だと、そのままa.txtファイルしか表示されません。
また、コマンドによって正規表現が使用できるものと使用できないものがあるそうです。
そのためワイルドカードを用いるのか、正規表現を用いるのかをコマンド毎に調べて使用する必要があります。
参考URL
・Linux【ワイルドカードと正規表現】の違いと変換,展開の動作 ~ ls, grep, findでの具体例の解説~ | SEの道標 (nesuke.com)