Существует ли порядок сортировки LC_COLLATE с поддержкой Юникода, который учитывает пунктуацию?

Насколько я могу судить, установка переменной среды LC_COLLATE=en_US.utf8 меняет четыре вещи по сравнению с LC_COLLATE=cо том, как программы, как ls будет сортировать файлы:

  1. Символы Unicode сохраняются (а не заменяются ?? мусор)
  2. Акценты и диакритические знаки не влияют на порядок сортировки
  3. Различия в регистре не влияют на порядок сортировки
  4. Знаки пунктуации (например, точки) не влияют на порядок сортировки

Функция 1 обязательна в наше время.
Функции 2 и 3 также хороши, так как они упрощают работу с реальными именами файлов Unicode.
С другой стороны, функция 4 - это то, что я нахожу действительно непродуктивным в своей повседневной работе, поскольку она часто генерирует нелогичные порядки сортировки для имен файлов Linux, где точки обычно используются для разделения суффиксов или указать точечные файлы. Я действительно не могу представить, почему кто-то думал, что было бы хорошей идеей игнорировать точки при сортировке имен файлов.

Например:

$ touch foo.txt foo2.txt foó3.txt foo4.txt

$ LC_COLLATE=en_US.utf8 ls
foo2.txt  foó3.txt  foo4.txt  foo.txt

$ LC_COLLATE=c ls
foo.txt  foo2.txt  foo4.txt  fo??3.txt

Ни один не является удовлетворительным. Вот как я бы хотел, чтобы эти файлы были отсортированы:

foo.txt  foo2.txt  foó3.txt  foo4.txt

Другими словами, так же, как с LC_COLLATE=en_US.utf8за исключением того, что знаки препинания рассматриваются как значимые символы (которые сортируются перед буквами).

Существует ли какая-либо настройка LC_COLLATE, которая делает это?

Если отсутствует пунктуация, поддерживающая все признаки 1-3, существует ли по крайней мере одна, поддерживающая функцию 1 (т.е. LC_COLLATE=c но не искажать символы Юникода)?

1 ответ

Проблема № 1 в том, что LC_COLLATE=c неверный язык Вам нужно использовать капитал C: LC_COLLATE=C,

Пример:

$ LC_COLLATE=c ls-1a
./
../
.sharp
.zharp
Sharp
sharp
szharp
zharp
??harp


$ LC_COLLATE=c ls-1a
./
../
.sharp
.zharp
Sharp
sharp
szharp
zharp
ßharp

Я не знаю, как выполнить сортировку с поддержкой юникода без сортировки имен файлов, начинающихся с точки сверху (хотя поиск ответа на этот вопрос и оказался здесь):-/

Другие вопросы по тегам