在sort命令中处理空格。 LC_COLLATE = c和LC_COLLATE =" en_US.UTF-8"之间的差异

时间:2014-05-14 16:28:27

标签: linux shell sorting unix

我试图在sort命令的手册页中查找,但找不到任何内容。 请考虑以下文本文件t.txt

 11
1 0

t.txt

的二进制表示
$ xxd -p t.txt
2031310a3120300a

在此文件中使用LC_COLLATE="en_US.UTF-8"sort会产生:

$  LC_COLLATE="en_US.UTF-8" sort t.txt
1 0
 11

如果我们检查文件中的第二个字符位置(或列),我们会观察到第一个 row有一个空格,第二行有1。 由于空格的十六进制值0x20小于1的十六进制值(0x31) 我认为那样会给出:

 11
1 0 

事实证明,可以使用LC_COLLATE=c

获得预期的排序顺序
$ LC_COLLATE=c sort t.txt
 11
1 0

这种情况下LC_COLLATE="en_US.UTF-8"LC_COLLATE=c之间存在差异的原因是什么?

另见:

修改

有关此问题的更多信息,请访问:

1 个答案:

答案 0 :(得分:2)

在en_US语言环境

中进行排序时,将忽略

标点符号

注意sort可以使用-b选项显式跳过空格, 但请注意使用的技巧,所以我建议使用sort --debug 使用时的选项。