Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在sort命令中处理空格。LC“U COLLATE=c和LC“U COLLATE=”之间的差异;en“美国UTF-8”;_Linux_Shell_Sorting_Unix - Fatal编程技术网

Linux 在sort命令中处理空格。LC“U COLLATE=c和LC“U COLLATE=”之间的差异;en“美国UTF-8”;

Linux 在sort命令中处理空格。LC“U COLLATE=c和LC“U COLLATE=”之间的差异;en“美国UTF-8”;,linux,shell,sorting,unix,Linux,Shell,Sorting,Unix,我试图在sort命令的手册页中查找此内容,但找不到任何内容。 因此,考虑下面的文本文件 T.TXT < /C> >: 11 1 0 (t.txt的二进制表示形式 $ xxd -p t.txt 2031310a3120300a ) 在此文件上使用LC\u COLLATE=“en\u US.UTF-8”和sort可提供: $ LC_COLLATE="en_US.UTF-8" sort t.txt 1 0 11 如果我们检查文件中的第二个字符位置(或列),我们会发现第一个字符 行有一个空格

我试图在
sort
命令的手册页中查找此内容,但找不到任何内容。 因此,考虑下面的文本文件<代码> T.TXT < /C> >:

 11
1 0
(t.txt的二进制表示形式

$ xxd -p t.txt
2031310a3120300a
)

在此文件上使用
LC\u COLLATE=“en\u US.UTF-8”
sort
可提供:

$  LC_COLLATE="en_US.UTF-8" sort t.txt
1 0
 11
如果我们检查文件中的第二个字符位置(或列),我们会发现第一个字符 行有一个空格,第二行有一个
1
。 因为空格的十六进制值为
0x20
,小于
1
的十六进制值(即
0x31
) 我认为这类人会:

 11
1 0 
结果表明,可以使用
LC\u COLLATE=c

$ LC_COLLATE=c sort t.txt
 11
1 0
对于这种情况,
LC\u COLLATE=“en\u US.UTF-8”
LC\u COLLATE=c
之间存在差异的原因是什么

另见:

编辑:

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


在en_US语言环境中进行排序时,标点符号将被忽略

注意sort可以使用-b选项显式跳过空格, 但请注意,这是使用的技巧,所以我建议使用sort--debug
选项。它取决于您的语言环境。例如,检查
LC_ALL=C排序文件,该文件首先给出
11
。看@fedorqui是的,是的!谢谢@fedorqui但是为什么没有
LC_ALL=C
它就不能工作呢?(
echo$LANG
给出了
en_US.UTF-8
)@HåkonHægland简单的答案是“因为不同地区的排序规则不同”。完整的答案可能要复杂一点……谢谢!这很有趣。我在这里还找到了更多信息:和。