Выполнение команды sed в perl скрипте

Диапазоны надежно и переносимо работают только в локали C. В других локалях возможны некоторые вариации, но в целом [x-y] позволяет получить символы (на самом деле элементы коллинга, он может даже соответствовать последовательности символов), которые сортируются после x и перед y в некотором порядке сортировки, который часто неясен и не всегда совпадает с тем, который используется в sort.

В локали C (см. Что делает "LC_ALL=C"?) символы являются байтами, а диапазоны основаны на кодовой точке символов (на значениях байтов).

LC_ALL=C find . -type f -name "*[^ -~]*"

на системе, основанной на ASCII (большинство из них; POSIX не гарантирует, что локаль C будет использовать ASCII charset, но на практике, если только вы не на какой-нибудь специальной ОС мейнфрейма IBM, основанной на EBCDIC (но тогда вы бы об этом знали), вы будете использовать ASCII), будут перечислены обычные файлы, имя которых содержит байты, отличные от байтов между 32 и 126.

Также обратите внимание, что в многобайтовой символьной локали (например, UTF-8, которая является нормой в настоящее время), * может даже не соответствовать всем именам файлов, так как на некоторых системах он не будет соответствовать последовательностям байтов, которые не образуют допустимых символов.

4
03.11.2017, 15:32
0 ответов

Теги

Похожие вопросы