Klammern funktionieren bei der Suche nach regulären Ausdrücken nicht

Klammern funktionieren bei der Suche nach regulären Ausdrücken nicht

Ich habe zwei Ordner CA01und CA02unter dem aktuellen Ordner foo:

foo -+
     |
     +-CA01
     |
     +-CA02

Wenn ich tippe

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

Oder

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

Ich habe die folgende Ausgabe, die erwartet wird:

./CA01 ./CA02

Aber wenn ich tippe

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

Es wird nichts angezeigt, was ziemlich unerwartet ist.

Weil standardmäßig findder reguläre Ausdruck von Emacs verwendet wird. Ich könnte alles oben genannte verwenden, um die beiden Ordner abzugleichen.

Übersehe ich hier etwas?

Antwort1

Sie müssen den -regextypeTyp in einen ändern, der Wiederholungszählungen unterstützt (also {2}). Der Standardtyp emacsscheint die Zählungen nicht zu unterstützen. Der Standard-Regex-Typ imitiert eine ältere Version von Emacs, die keine Syntax für Wiederholungszählungen hatte. Die folgenden Typen scheinen für mich zu funktionieren.

Beispiele

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-erweitert

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

Es gibt noch andere, aber ich habe sie nicht weiter ausprobiert. Siehe die findManpage und suche nach -regextype.

Auszug

-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.

Meine Version von find

$ 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) 

verwandte Informationen