linux排序意外输出

时间:2011-06-30 07:57:50

标签: shell

我使用排序文件

ABC
AB-C
ABCDEFG-HI

我得到了

ABC
AB-C
ABCDEFG-HI

为什么按这种方式对字符串进行排序?如何按字母顺序排序' - '?

2 个答案:

答案 0 :(得分:5)

@cnicutar提供的解决方案是正确的,但原因需要解释,这就是我给出新答案的原因。

在与@cnicutar讨论之后,我最终怀疑coreutils中有一个错误'sort我发现this sorting behavior is expected

  

此时排序显示已损坏,因为案例已折叠且标点符号被忽略,因为'en_US.UTF-8'指定了此行为。

因此,对于sort,您的输入似乎映射如下:

ABC -> ABC
AB-C -> ABC
ABCDEFG-HI -> ABCDEFGHI

如果您想要纯ASCII排序,则需要拨打LC_ALL=C sort(在调用C时暂时将语言环境设置为sort,这意味着没有本地化的“标准”行为;您也可以使用POSIX代替C)。

在其他Unix上,这种行为似乎有所不同(在Mac OS X上测试哪些用户工具是从FreeBSD派生的),但LC_ALL=C sort应该在所有POSIX系统中产生相同的行为。

答案 1 :(得分:3)

我记得这个:))试试

[cnicutar@aiur ~]$ LANG=POSIX sort
ABC
AB-C
ABCDEFG-HI
AB-C
ABC
ABCDEFG-HI

或者LANG=C也可以。