括弧式は正規表現の検索では機能しません

括弧式は正規表現の検索では機能しません

フォルダーが 2 つあり、CA01現在CA02のフォルダーの下には次のフォルダーがありますfoo

foo -+
     |
     +-CA01
     |
     +-CA02

入力すると

find . -regex ".*CA[0-9]+" -exec echo {} +

または

find . -regex ".*CA[0-9][0-9]" -exec echo {} +

予想通り、次のような出力が得られました。

./CA01 ./CA02

しかし、私が入力すると

find . -regex ".*CA[0-9]\{2\}" -exec echo {} +

何も表示されません。これはまったく予想外です。

デフォルトでは、findemacs 正規表現が使用されるためです。上記のすべてを使用して、2 つのフォルダーを一致させることができます。

何か見逃しているのでしょうか?

答え1

-regextypeを繰り返し回数をサポートするもの (つまり ) に変更する必要があります{2}。デフォルトの はemacs回数をサポートしていないようです。デフォルトの正規表現タイプは、繰り返し回数の構文を持たない Emacs の古いバージョンを模倣しています。以下のタイプは私の環境では機能するようです。

posix-egrep

$ find foo -regextype posix-egrep -regex ".*CA[0-9]{2}" -exec echo {} +
foo/CA02 foo/CA01

sed

$ find foo -regextype sed -regex ".*CA[0-9]\{2\}" -exec echo {} +
foo/CA02 foo/CA01

POSIX拡張

$ find foo -regextype posix-extended -regex ".*CA[0-9]{2}" -exec echo {} +
foo/CA02 foo/CA01

他にもありますが、これ以上は試していません。manfindページを参照して、 を検索してください-regextype

抜粋

-regextype type
       Changes  the  regular  expression  syntax  understood by -regex and 
       -iregex tests which occur later on the command line.  Currently
       implemented types are emacs (this is the default), posix-awk, 
       posix-basic, posix-egrep and posix-extended.

私のバージョンの検索

$ find -version
find (GNU findutils) 4.5.9
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Built using GNU gnulib version 1778ee9e7d0e150a37db66a0e51c1a56755aab4f
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS(FTS_CWDFD) CBO(level=2) 

関連情報