我想使用linux命令sort
对文件进行全行排序。
我的文件cat hello
#_
*
#1
与sort hello
一起运行时
#_
*
#1
由于#
在asccii表中的*
之前,我的预期结果是
#_
#1
*
有人可以解释我为什么吗?谢谢。
答案 0 :(得分:2)
默认情况下,gnu sort 不会按字节顺序排序,也就是说,不会遵循ascii表中的顺序。检查此示例:
kent$ cat f1
a
b
c
A
B
C
kent$ sort f1
a
A
b
B
c
C
如果您希望排序按字节排序,则可以设置LC_ALL
:
kent$ LC_ALL=C
kent$ sort f1
A
B
C
a
b
c
因此,通过LC_ALL=C
,您也将获得预期的输出。
kent$ cat f
#_
*
#1
kent$ sort f
#1
#_
*
我刚刚检查了手册页,它也按字面说明:
*警告* 环境指定的语言环境会影响排序顺序。设置LC_ALL = C以获取使用的传统排序顺序 本机字节值。