以UTF8对linux进行排序

以UTF8对linux进行排序

排序后的文件(带有LANG = fr_FR.UTF-8)包含:

Bassano del Grappa - Remondini, Giuseppe, II (1745-1811)
Bassano del Grappa - Remondini, Giuseppe, I (1672-1742)
...
Zurich - Wolf, Johannes (1564-1627)
Zurich - Wolf, Johann Rudolf, I (15..-1624)

重音没有问题。但是,为什么是II之前I还是Johannes之前呢Johann

(这是在 Red Hat Enterprise Linux Server 版本 6.6(圣地亚哥)上)。

答案1

当使用非 POSIX 语言环境时,GNU sort不会导致 Linux 下的预期输出。即使使用 GNU,这种情况也不会在 Solaris 下发生sort。请参阅 Stéphane Chazelas 的深入解释这里

最好的选择是切换到POSIX至少可以获得一致输出的区域设置:

例如:

$ cat f
w
e
é
f
 z
  x

Linux:

$ LC_ALL=C sort f
  x
 z
e
f
w
é
$ LC_ALL=fr_FR.utf8 sort s
e
é
f
w
  x
 z

索拉里斯:

LC_ALL=C sort s 
  x
 z
e
f
w
é
$ LC_ALL=fr_FR.UTF-8 sort s
  x
 z
e
é
f
w

答案2

我通过在排序之前用模式 000 替换所有空格解决了这个问题(这可能是一个空格问题!!?)。谢谢大家,特别是 Stéphane 提供的“从字符串中生成整理顺序”的链接。

相关内容