Sí, es [[:digit:]]~ [0-9]~ \d(donde ~ significa aproximado).
En la mayoría de los lenguajes de programación (donde es compatible) \d≡ [[:digit:]](idéntico).
El \des menos común que [[:digit:]](no en POSIX pero está en GNU grep -P).
Hay muchos dígitos en UNICODE , por ejemplo:
123456789 # Hindu-Arabic Números arábigos
٠١٢٣٤٥٦٧٨٩ # ARABIC-INDIC
۰۱۲۳۴۵۶۷۸۹ # EXTENDED ARABIC-INDIC/PERSIAN
߀߁߂߃߄߅߆߇߈߉ # NKO DIGIT
०१२३४५६७८९ # DEVANAGARI
Todo lo cual puede estar incluido en [[:digit:]]o \d.
En cambio, [0-9]generalmente son solo los dígitos ASCII 0123456789.
Hay muchos lenguajes: Perl, Java, Python, C. En los cuales [[:digit:]](y \d) requiere un significado extendido. Por ejemplo, este código perl coincidirá con todos los dígitos de arriba:
$ a='0123456789 ٠١٢٣٤٥٦٧٨٩ ۰۱۲۳۴۵۶۷۸۹ ߀߁߂߃߄߅߆߇߈߉ ०१२३४५६७८९'
$ echo "$a" | perl -C -pe 's/[^\d]//g;' ; echo
0123456789٠١٢٣٤٥٦٧٨٩۰۱۲۳۴۵۶۷۸۹߀߁߂߃߄߅߆߇߈߉०१२३४५६७८९
Lo que equivale a seleccionar todos los caracteres que tienen las propiedades Unicode de Numericy digits:
$ echo "$a" | perl -C -pe 's/[^\p{Nd}]//g;' ; echo
0123456789٠١٢٣٤٥٦٧٨٩۰۱۲۳۴۵۶۷۸۹߀߁߂߃߄߅߆߇߈߉०१२३४५६७८९
Qué grep podría reproducirse (la versión específica de pcre puede tener una lista interna diferente de puntos de código numérico que Perl):
$ echo "$a" | grep -oP '\p{Nd}+'
0123456789
٠١٢٣٤٥٦٧٨٩
۰۱۲۳۴۵۶۷۸۹
߀߁߂߃߄߅߆߇߈߉
०१२३४५६७८९
Cámbielo a [0-9] para ver:
$ echo "$a" | grep -o '[0-9]\+'
0123456789
POSIX
Para el POSIX BRE o ERE específico:
El \dno es compatible (no en POSIX pero está en GNU grep -P).
[[:digit:]]POSIX requiere que se corresponda con la clase de caracteres de dígitos, que a su vez ISO C requiere que sean los caracteres del 0 al 9 y nada más. Así que sólo en C locale todo [0-9], [0123456789], \dy [[:digit:]]significan exactamente lo mismo. No [0123456789]tiene posibles interpretaciones erróneas, [[:digit:]]está disponible en más utilidades y es común que solo signifique [0123456789]. El \des compatible con pocas utilidades.
En cuanto a [0-9], el significado de las expresiones de rango solo está definido por POSIX en la configuración regional C; en otros entornos locales puede ser diferente (puede ser el orden de los puntos de código o el orden de clasificación u otra cosa).
conchas
Algunas implementaciones pueden entender que un rango es algo diferente del orden ASCII simple (por ejemplo, ksh93):
$ LC_ALL=en_US.utf8 ksh -c 'a="'"$a"'";echo "${a//[0-9]}"'
۹ ߀߁߂߃߄߅߆߇߈߉ ९
Y esa es una fuente segura de errores que esperan suceder.