GNU grep & find -regex: .regexが必要な理由は何ですか、POSIX文字クラスが利用できないのはなぜですか?

GNU grep & find -regex: .regexが必要な理由は何ですか、POSIX文字クラスが利用できないのはなぜですか?

私は〜だったUNIXに似たシステム命名指示に従わないディレクトリ内のファイルを見つけようとしました。

find コマンドで使用する場合find <dir> -regex '.*[^-_./0-9a-zA-Z].*' 興味のあるファイルを返す

上記のコマンドラインに関する私の質問は次のとおりです。

  1. 私たちに必要な理由すべての文字.以前のメタ文字0以上 *メタ文字は、期待どおりに機能するために正規表現の始めと終わりに配置されます。初めて試したときにfind <dir> -regex '*[^-_./0-9a-zA-Z]*'何も返されませんでした。
  2. また、character ranges正規表現をPOSIX character classes他のすべての項目に対応する正規表現に置き換えると、find <dir> -regex '.*[^-_./[:digit:][:lower:][:upper:]].*'何も返されません。なぜこれが起こるのですか?

ティア!

答え1

  1. *正規表現構文では、次のようになります。量子以前の正規表現原子(この場合.)に適用されます。これはいいえシェルパターンマッチング構文(「globbing」とも呼ばれます)のように、それ自体は「0個以上のメタ文字」です。

  2. これは基本的なEmacs正規表現型の特別な機能です。たとえば、よりおなじみの動作をしたい場合、-regextype posix-basicまたはを使用してみてください。-regextype egrep

関連情報