Так, це [[:digit:]]~ [0-9]~ \d(де ~ означає приблизно).
У більшості мов програмування (де він підтримується) \d≡ [[:digit:]](однаковий).
Це \dрідше, ніж [[:digit:]](не в POSIX, але воно є в GNU grep -P).
У UNICODE є багато цифр , наприклад:
123456789 # Hindu-Arabic Арабські цифри
٠١٢٣٤٥٦٧٨٩ # ARABIC-INDIC
۰۱۲۳۴۵۶۷۸۹ # EXTENDED ARABIC-INDIC/PERSIAN
߀߁߂߃߄߅߆߇߈߉ # NKO DIGIT
०१२३४५६७८९ # DEVANAGARI
Все це може бути включено до [[:digit:]]або \d.
Натомість, [0-9]це лише цифри ASCII 0123456789.
Є багато мов: Perl, Java, Python, C. У яких [[:digit:]](і \d) вимагається розширене значення. Наприклад, цей код perl буде відповідати всім цифрам зверху:
$ a='0123456789 ٠١٢٣٤٥٦٧٨٩ ۰۱۲۳۴۵۶۷۸۹ ߀߁߂߃߄߅߆߇߈߉ ०१२३४५६७८९'
$ echo "$a" | perl -C -pe 's/[^\d]//g;' ; echo
0123456789٠١٢٣٤٥٦٧٨٩۰۱۲۳۴۵۶۷۸۹߀߁߂߃߄߅߆߇߈߉०१२३४५६७८९
Що еквівалентно вибору всіх символів, які мають властивості Unicode Numericта digits:
$ echo "$a" | perl -C -pe 's/[^\p{Nd}]//g;' ; echo
0123456789٠١٢٣٤٥٦٧٨٩۰۱۲۳۴۵۶۷۸۹߀߁߂߃߄߅߆߇߈߉०१२३४५६७८९
Який греп може відтворити (конкретна версія pcre може мати різний внутрішній список числових точок коду, ніж Perl):
$ echo "$a" | grep -oP '\p{Nd}+'
0123456789
٠١٢٣٤٥٦٧٨٩
۰۱۲۳۴۵۶۷۸۹
߀߁߂߃߄߅߆߇߈߉
०१२३४५६७८९
Змініть його на [0-9], щоб побачити:
$ echo "$a" | grep -o '[0-9]\+'
0123456789
POSIX
Для конкретного POSIX BRE або ERE:
The \dне підтримується (не в POSIX, але знаходиться в GNU grep -P).
[[:digit:]]вимагає POSIX, щоб відповідати розрядному класу символів, який, в свою чергу, вимагається ISO C, щоб бути символами від 0 до 9 і більше нічого. Так тільки в C локалі все [0-9], [0123456789], \dі [[:digit:]]означають одне і те ж. [0123456789]Не має можливих пересудів, [[:digit:]]доступний в декількох утиліт , і це часто означає тільки [0123456789]. The \dпідтримується декількома утилітами.
Що стосується [0-9], значення виразів діапазону визначається лише POSIX у мові C; в інших місцевостях це може бути інакше (це може бути порядок кодової точки чи порядок порівняння чи щось інше).
снарядів
Деякі реалізації можуть розуміти, що діапазон є чимось іншим, ніж звичайний порядок ASCII (наприклад, ksh93):
$ LC_ALL=en_US.utf8 ksh -c 'a="'"$a"'";echo "${a//[0-9]}"'
۹ ߀߁߂߃߄߅߆߇߈߉ ९
І це впевнене джерело помилок, які чекають цього.