Почему uniq считает, что あ い и い あ одинаковы?

Если вам нужно одно выражение, вы можете сделать:

sed -i 's#/client/[^/]*#/client/12x_64#g' config*

Я использовал / client / [^ /] * в качестве маркера, чтобы найти то, что мы хотим заменить (т.е. все, что находится после / client / , но до следующего / ), но мы могли бы сделать client / [^ / ] * / instance , если это позволяет избежать сопоставления других элементов в файле.

5
29.06.2017, 18:28
1 ответ

Да, если локаль en _US.utf8 (например ), обе строки кажутся равными:

$ printf "%s\n" "いあ" "あい" "いあ" "あい"
いあ
あい
いあ
あい

$ LC_COLLATE=en_US.utf8 bash -c '
    printf "%s\n" "いあ" "あい" "いあ" "あい" |
    sort | 
    uniq '
いあ

Однако, если язык изменить на ja _JP, все работает правильно:

$ LC_COLLATE=ja_JP.utf8 bash -c '
    printf "%s\n" "いあ" "あい" "いあ" "あい" | 
    sort | 
    uniq '
あい
いあ

Интересно отметить, что (в этом случае )локаль C также работает:

$ LC_COLLATE=C bash -c '
    printf "%s\n" "いあ" "あい" "いあ" "あい" |
    sort |
    uniq '
あい
いあ

Это только показывает, что en _US отсутствует порядок сортировки для некоторых кодовых точек.

3
27.01.2020, 20:41

Теги

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