コマンドラインで、いろいろやるときに、ワイルドカードと正規表現が自分の頭の中でごっちゃになるので、まとめておこうと思います。
シェル
シェルはワイルドカードを展開します。
なのでecho *
とすると、カレントディレクトリ以下のファイルが(ディレクトリも)表示されます。
ほかにも、シェルで展開されるものがあり、チルダやブレースも展開されます。
[MacbookProKun]:/ % echo *
Applications Library System Users Volumes bin cores dev etc home opt private sbin tmp usr var
[MacbookProKun]:/ % echo ~
/Users/ユーザー名
[MacbookProKun]:/ % echo {1..10}
1 2 3 4 5 6 7 8 9 10
ここで重要なのが、ワイルドカードに関してはコマンドに渡される前に展開されますが、シェルは正規表現を解釈できないということです。
コマンド
grep
では、ワイルドカードではなく、正規表現になります。デフォルトでは基本正規表現(オプションは-G
)、また拡張正規表現(オプションは-E
)、Perlの正規表現(オプションは-P
)などがあります。
[MacbookProKun]:/ % echo "a\nab\nabb" | grep 'ab*'
a
ab
abb
bが0個以上繰り返されている
まとめ
"コマンドで何かする時は正規表現"、でも"シェルでまずはワイルドカードが展開される"と覚えておけば良いと思います。
参考