3

応答によって開始されます。

  1. ワイルドカードの代わりに正規表現のみを使用するにはどうすればよいですか?
  2. 正規表現を使用できる場合、ワイルドカードとグロビングが本当に必要なのはどこですか?
  3. 正規表現はワイルドカードから進化しましたか、それともその逆ですか?
4

3 に答える 3

6

あなたの混乱は、シェルグロビングのワイルドカード (*文字) と正規表現記号 (*文字) の違いに基づいていると思います。正規表現はシェルグロビングではなく、はるかに強力で便利ですが、シェルを日常的に使用する場合は、ワイルドカードとシェル グロビングで「十分」です。

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

シェルを使用しないでください。Perl/Python/Ruby/[your-choice-of-scripting-language-here] スクリプトを書いて、あなたのために仕事をしてください。それほど分岐する必要がないため、おそらく高速になります。

  1. 正規表現を使用できる場合、ワイルドカードとグロビングが本当に必要なのはどこですか?

いいえ。しかし、ほとんどのシェルには正規表現がないため、グロブがあります。それらを貧乏人の正規表現と考えてください。

  1. 正規表現はワイルドカードから進化しましたか、それともその逆ですか?

正規表現は集合論、特に初期のテキスト エディター (と呼ばれる初期の Unix テキスト エディターの 1 つに正規表現のような機能があり、その後、聞いたことがあるかもしれないedという小さなプログラムで再利用されました) に由来します。grepワイルドカードはシェルの機能にすぎないと思います。それらの実装は難しくないため、シェルの作成者はそれらをかなり迅速に追加し、オーバーヘッドもほとんどありません。

于 2009-08-24T20:00:05.460 に答える
5

マニュアルページに記載されています:

・名前パターン

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

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

一般に、man ページは多くのことを教えてくれます。;)

$ man find

詳細については。

于 2009-08-24T18:02:16.930 に答える
0

私の最初の質問には間違った前提がありました。それらはワイルドカードであり、正規表現ではありません! glob-program はワイルドカードを処理します。

正規表現

ワイルドカード パターンは少し似ていますが、正規表現ではないことに注意してください。まず第一に、それらはテキストではなくファイル名に一致し、第二に、規則が同じではありません: たとえば、正規表現では、'*' は前のものの 0 個以上のコピーを意味します。正規表現には、否定が '^' で示されるブラケット表現が含まれるようになったため、POSIX ではワイルドカード パターン "[^...]" の効果が未定義であると宣言されました。

説明は 100% 徹底しているわけではありません。たとえば、ファイル名を Regex と簡単に一致させることができます。

于 2009-08-24T19:32:39.477 に答える