応答によって開始されます。
- ワイルドカードの代わりに正規表現のみを使用するにはどうすればよいですか?
- 正規表現を使用できる場合、ワイルドカードとグロビングが本当に必要なのはどこですか?
- 正規表現はワイルドカードから進化しましたか、それともその逆ですか?
あなたの混乱は、シェルグロビングのワイルドカード (*文字) と正規表現記号 (*文字) の違いに基づいていると思います。正規表現はシェルグロビングではなく、はるかに強力で便利ですが、シェルを日常的に使用する場合は、ワイルドカードとシェル グロビングで「十分」です。
- ワイルドカードの代わりに正規表現のみを使用するにはどうすればよいですか?
シェルを使用しないでください。Perl/Python/Ruby/[your-choice-of-scripting-language-here] スクリプトを書いて、あなたのために仕事をしてください。それほど分岐する必要がないため、おそらく高速になります。
- 正規表現を使用できる場合、ワイルドカードとグロビングが本当に必要なのはどこですか?
いいえ。しかし、ほとんどのシェルには正規表現がないため、グロブがあります。それらを貧乏人の正規表現と考えてください。
- 正規表現はワイルドカードから進化しましたか、それともその逆ですか?
正規表現は集合論、特に初期のテキスト エディター (と呼ばれる初期の Unix テキスト エディターの 1 つに正規表現のような機能があり、その後、聞いたことがあるかもしれないedという小さなプログラムで再利用されました) に由来します。grepワイルドカードはシェルの機能にすぎないと思います。それらの実装は難しくないため、シェルの作成者はそれらをかなり迅速に追加し、オーバーヘッドもほとんどありません。
マニュアルページに記載されています:
・名前パターン
検査中のパス名の最後のコンポーネントが pattern に一致する場合は true。特殊なシェル パターン マッチング文字 (
[、]、*、および?) をパターンの一部として使用できます。これらの文字は、バックスラッシュ ( ) でエスケープすることにより、明示的に一致させることができます\。
つまり、シェル glob パターンで使用できるパターンは、 で使用できfindます。
一般に、man ページは多くのことを教えてくれます。;)
$ man find
詳細については。
私の最初の質問には間違った前提がありました。それらはワイルドカードであり、正規表現ではありません! glob-program はワイルドカードを処理します。
正規表現
ワイルドカード パターンは少し似ていますが、正規表現ではないことに注意してください。まず第一に、それらはテキストではなくファイル名に一致し、第二に、規則が同じではありません: たとえば、正規表現では、'*' は前のものの 0 個以上のコピーを意味します。正規表現には、否定が '^' で示されるブラケット表現が含まれるようになったため、POSIX ではワイルドカード パターン "[^...]" の効果が未定義であると宣言されました。
説明は 100% 徹底しているわけではありません。たとえば、ファイル名を Regex と簡単に一致させることができます。