dポイントプレゼントキャンペーン実施中!

UNIX初心者の者です。現在Solarisを使い毎日悪戦苦闘しています。
質問なのですが、「正規表現」と「ワイルドカード」とはどのように違うものなのでしょうか。ちょっと混乱しています。
現状の認識では、
「ワイルドカード」-コマンドラインで使うもの。エスケープするときは「’’」で囲む。複雑な指定は難しい。
「正規表現」-コマンドの引数や、スクリプトなどで使われるもの。エスケープするときは「¥」をつける。基本的に「’’」で囲むもの。様々な表現が可能。
といった感じにとらえています。が、いざ使うとなると混乱している状態です。
すみませんが、この2つについて教えてもらえないでしょうか。
あと参考になるような本やホームページなどもあるでしょうか?コマンドの組み合わせやシェルスクリプトの記述なども勉強中なので、その関係の事でもよいので。
よろしくお願いします。

A 回答 (1件)

正規表現(Regular Expressions, RE)は使いこなすと便利ですよね。



>「ワイルドカード」-コマンドラインで使うもの。エスケープするときは「’’」で囲む。
>複雑な指定は難しい。
実際にはシェルスクリプトでも使えますが、ワイルドカードの展開はシェルの仕事だから
Cプログラムでは処理する必要はないし、だいたいそういう認識でいいのでは。
「''」で囲むというのはワイルドカード自身の属性というよりは
コマンドラインでシェルが展開してくれるのを防ぐためですね。

「ワイルドカード」とはもともとトランプ用語で、どのカードの代わりにも使える
オールマイティなカードを指したもので、これから転じて
file000.jpg, file001.jpg,...file999.jpg というファイルがあるとき
「file*.jpg」とか「file???.jpg」「file[0-9][0-9][0-9].jpg」などという指定ができるのが
シェルのワイルドカードで、ここまではご存じと思います。

Solaris のシェルというと Bourne Shell(sh)でしたっけ。Linux の bash など
モダンなシェルよりは機能的に劣ります。
sh ではどのみち複雑な指定はできないのでざっと流しても構いません。
また、bash のような高機能シェルだったら help コマンドでオンラインヘルプが見られます。

シェルのワイルドカード(グロビング)については、アスキーの
「たのしい UNIX」「続・たのしい UNIX」(坂本文)が参考になるでしょう。
また、やはりアスキーの「UNIX プログラミング環境」(Kernighan&Pike著、石田晴久訳)も
古き良き UNIX 文化を伝える不朽の名著ですから、かえって Solaris の sh では
素直に使えるかもしれません。シェルスクリプトから高度なCプログラミングの勉強にも
もってこいです。
ここでも興味深い質問がありましたので、ぜひご覧ください。
No.483118 質問:シェルスクリプトに手をだしてみたいのですが。。。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=483118

>「正規表現」-コマンドの引数や、スクリプトなどで使われるもの。
>エスケープするときは「¥」をつける。基本的に’’」で囲むもの。様々な表現が可能。

よく勉強してらっしゃいますね。正規表現はワイルドカードよりずっと柔軟な表現が可能で
その気になれば分厚い本が一冊書けてしまいます。
事実、オライリーから「詳説 正規表現」(Jeffery E. F. Friedl 著、歌代和正他訳)
という大部が出ています。
http://www.amazon.co.jp/exec/obidos/ASIN/4900900 …
オライリー・ジャパンのサイトになかったとこを見ると、第2版が近々出るのかな?

また正規表現の文法にはさまざまな方言があって、grep, sed のような単純なもの
(BRE, Basic RE)や egrep, awk のように多少拡張されたもの(ERE, Extended RE)
などありますが、現在最有力なのが Perl5 のものです。
Python や Ruby といった後輩スクリプト言語や Java 1.4 の正規表現も
Perl5 互換を目標としています。

正規表現は文字列処理の「肝」ですので(これを軽視しているMSソフトが信じられない!)
解説しているサイトはたくさんあります。
参考 URL の正規表現リンク集からいくらでもたどれますが、
2番目の「Riue ちゃんの正規表現講座」が初心者向けでしょうか。
おさらいには以下の「正規表現メモ」がいいかと思います。
http://www.kt.rim.or.jp/~kbk/regex/regex.html
また、「Perl 正規表現雑技」をご覧になれば、素因数分解までやってのける
正規表現のパワーに瞠目されること間違いありません。
http://www.din.or.jp/~ohzaki/regex.htm

このように、正規表現が最も威力を発揮するのは Perl などの
スクリプト言語ですので、Perl 関連のサイトやドキュメントをご覧になれば
いっそう勉強が進むと思います。長くなってしまいましたが、
美味しいとこだけつまみ食いして、できるところから始めればいいのです。
健闘を祈ります(^^

参考URL:http://www2.famille.ne.jp/~akio1998/l_grep.html, …
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
頭の中がすっきりしたような気がします。
毎日、基本的な事しかしていないのですが、それでもこの2つを使うと、いろいろ便利になります。

>正規表現は文字列処理の「肝」ですので

スクリプトなどを勉強すると、まさにおっしゃる通りだと実感します。使っている人には当たり前なのでしょうが、初心者の私には、コマンドを使った様々な機能と共に、正規表現を勉強するつもりです。

>美味しいとこだけつまみ食いして、できるところから始めればいいのです。

最初なのでなんでも有りの気持ちでやっていましたが、シンプルかつ実用的なご助言、ありがとうございます。正規表現なども言葉は悪いですが「いかに楽をするか」「短い表現でシンプルに表すか」みたいなところを感じています。
ありがとうございました。

お礼日時:2003/05/24 15:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!