Sì, è [[:digit:]]~ [0-9]~ \d(dove ~ significa approssimativo).
Nella maggior parte dei linguaggi di programmazione (dove è supportato) \d≡ [[:digit:]](identico).
L' \dè meno comune che [[:digit:]](non in POSIX ma è in GNU grep -P).
Esistono molte cifre in UNICODE , ad esempio:
123456789 # Hindu-Arabic Numeri arabi
٠١٢٣٤٥٦٧٨٩ # ARABIC-INDIC
۰۱۲۳۴۵۶۷۸۹ # EXTENDED ARABIC-INDIC/PERSIAN
߀߁߂߃߄߅߆߇߈߉ # NKO DIGIT
०१२३४५६७८९ # DEVANAGARI
Tutto ciò può essere incluso in [[:digit:]]o \d.
Invece, [0-9]è generalmente solo le cifre ASCII 0123456789.
Esistono molte lingue: Perl, Java, Python, C. In cui [[:digit:]](e \d) richiede un significato esteso. Ad esempio, questo codice perl corrisponderà a tutte le cifre dall'alto:
$ a='0123456789 ٠١٢٣٤٥٦٧٨٩ ۰۱۲۳۴۵۶۷۸۹ ߀߁߂߃߄߅߆߇߈߉ ०१२३४५६७८९'
$ echo "$a" | perl -C -pe 's/[^\d]//g;' ; echo
0123456789٠١٢٣٤٥٦٧٨٩۰۱۲۳۴۵۶۷۸۹߀߁߂߃߄߅߆߇߈߉०१२३४५६७८९
Che equivale a selezionare tutti i caratteri che hanno le proprietà Unicode di Numerice digits:
$ echo "$a" | perl -C -pe 's/[^\p{Nd}]//g;' ; echo
0123456789٠١٢٣٤٥٦٧٨٩۰۱۲۳۴۵۶۷۸۹߀߁߂߃߄߅߆߇߈߉०१२३४५६७८९
Quale grep potrebbe riprodurre (la versione specifica di pcre potrebbe avere un elenco interno diverso di punti di codice numerico rispetto a Perl):
$ echo "$a" | grep -oP '\p{Nd}+'
0123456789
٠١٢٣٤٥٦٧٨٩
۰۱۲۳۴۵۶۷۸۹
߀߁߂߃߄߅߆߇߈߉
०१२३४५६७८९
Cambialo in [0-9] per vedere:
$ echo "$a" | grep -o '[0-9]\+'
0123456789
POSIX
Per POSIX BRE o ERE specifici:
The \dnon è supportato (non in POSIX ma è in GNU grep -P).
[[:digit:]]POSIX deve corrispondere alla classe di caratteri delle cifre, che a sua volta è richiesta da ISO C per essere i caratteri da 0 a 9 e nient'altro. Quindi, solo in versione locale C tutto [0-9], [0123456789], \de [[:digit:]]dire esattamente la stessa cosa. Non [0123456789]ha possibili interpretazioni errate, [[:digit:]]è disponibile in più utility ed è comune significare solo [0123456789]. Il\d è supportato da poche utility.
Per quanto riguarda [0-9], il significato delle espressioni di intervallo è definito solo da POSIX nella locale C; in altri locali potrebbe essere diverso (potrebbe essere un ordine in codice o un ordine di confronto o qualcos'altro).
conchiglie
Alcune implementazioni potrebbero comprendere un intervallo come qualcosa di diverso dal semplice ordine ASCII (ad esempio ksh93):
$ LC_ALL=en_US.utf8 ksh -c 'a="'"$a"'";echo "${a//[0-9]}"'
۹ ߀߁߂߃߄߅߆߇߈߉ ९
E questa è una fonte sicura di bug in attesa di accadere.