2009-08-24 20 views
3

replyによって開始されます。シェルグローブワイルドカードとRegexとの混同

  1. ワイルドカードの代わりにRegexだけを使用するにはどうすればよいですか?
  2. 本当に正規表現を使用することができる場合、ワイルドカードとglobbingが必要ですか?
  3. Regexesはワイルドカードから進化しましたか?マニュアルページで説明
+1

"regex = language、wildcards = alphabets"というメタファーを使って何を得ているのか分かりません。あなたは精緻化できますか? –

+1

ワイルドカードも言語です。しかし、その意味論は正規表現のものと同じではありません。特定の正規表現(ワイルドカード正規表現)に似た振る舞いをするメタ文字だけがあります: '' '' '' '' '' '' '' ... '' [...] ' 。 – Gumbo

+0

Gumbo:命題論理は、述語論理との違いである量子を含んでいません。 「セマンティクス」という言葉は、それらと何か関係がありますか? –

答えて

6

あなたの混乱は、シェルグロブワイルドカード(*文字)と正規表現シンボル(*文字)の違いに基づいていると思います。 Regexes シェルグロブではありませんが、より強力で便利ですが、毎日のシェルの使用では、ワイルドカードとシェルグロブは「十分に良い」です。

  1. ワイルドカードの代わりにRegexのみを使用するにはどうすればよいですか?

シェルを使用しないでください。あなたのためにPerl/Python/Ruby/[script-language-here]スクリプトを書いてください。あまりにも多くをフォークする必要はないので、おそらく速くなるでしょう。

  1. Regexを使用できる場合は、本当にどこにワイルドカードとグロビングが必要ですか?あなたはグロブを持っているよう

号しかし、ほとんどのシェルでは、あなたがは、正規表現を持っていない。彼らを貧しい人の正規表現と考えてください。

  1. Regexesはワイルドカードから進化しましたか?

正規表現は、集合論から来て、特に初期のテキストエディタは、(1つの初期のUnixのテキストエディタはedが、その後、grepと呼ばれる小さなプログラムで再使用された正規表現に似た機能を、持っていたあなたがかもしれないと呼ばれます聞いたことがある)。ワイルドカードはちょうどシェルの機能だと思います。実装するのは難しいことではないので、シェルの作者はそれらをかなり短時間で簡単に追加できます。

+0

歴史:私はBBCの記事からいくつかの神経科学者が形式的な数学的定式化の前にRegexを考案したと読む。誰かが望むなら、私はそれを探すことができます。 –

+0

Ps:ワイルドカードの歴史について知ることは興味深いでしょう。 Regexは単なるCAであるため、明確です。 –

5

-nameパターン

検査されているパス名の最後の構成要素は、パターンが一致する場合はtrue。特殊シェルパターン一致文字([]*、および?)をパターンの一部として使用できます。これらの文字は、バックスラッシュ(\)でエスケープすることで明示的に一致させることができます。

つまり、シェルグロブパターンで使用できるパターンは、findで使用できます。

一般的には、マニュアルページで多くのことを伝えることができます。 ;)

$ man find 

詳細については、

+1

シェルマッチングシステムは 'glob'と呼ばれます。 – dmckee

0

私の最初の質問には間違った前提がありました。彼らは正規表現ではなくワイルドカードです! Glob-programはワイルドカードを処理します。彼らは少し 似ていますが、 ワイルドカードパターンは、正規の 表現ではないことを

正規表現

注意。まず最初に、テキストではなく のファイル名と一致し、 の2番目の規則は、 と同じです。たとえば、通常の という表現では、 '*'は先行するもののコピーが0個以上あることを意味します。今すぐ 正規表現に括弧が付きます 否定が '^'で示される である場合、POSIXはワイルドカードパターン "[^ ...]"の効果が定義されていないと と宣言しました。

説明は100%完全ではありません。たとえば、ファイル名をRegexに簡単にマッチさせることができます。

+2

できますが、正規表現にはオーバーヘッドが大きくなる傾向があります。私は、一般的に、十分に正確なグロブを見つけました。ブラケットの使用は、シェルで必要以上のものです。実際に正規表現の使用が必要なもっと複雑なことが必要な場合は、シェルをやり直すのではなく、簡単なPerlスクリプトを作成するほど複雑になる傾向があります。 –

+0

ルッツ:+1良い点。 –