Linux整行排序不正确
我想用linux命令对文件进行整行排序Linux整行排序不正确,linux,bash,shell,sorting,posix,Linux,Bash,Shell,Sorting,Posix,我想用linux命令对文件进行整行排序sort 我的文件cat hello #_ * #1 #_ * #1 使用sort hello运行时 #_ * #1 #_ * #1 因为在asccii表中,#位于*之前,所以我的预期结果是 #_ #1 * 有人能解释为什么吗?谢谢。默认情况下,gnu排序不按字节排序,也就是说,不会遵循ascii表中的顺序。检查此示例: kent$ cat f1 a b c A B C kent$ sort f1 a A b B c C
sort
我的文件cat hello
#_
*
#1
#_
*
#1
使用sort hello运行时
#_
*
#1
#_
*
#1
因为在asccii表中,#
位于*
之前,所以我的预期结果是
#_
#1
*
有人能解释为什么吗?谢谢。默认情况下,gnu排序不按字节排序,也就是说,不会遵循ascii表中的顺序。检查此示例:
kent$ cat f1
a
b
c
A
B
C
kent$ sort f1
a
A
b
B
c
C
如果希望排序按字节排序,可以设置LC\u 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以获取使用
本机字节值
我的输出是
#1
然后*
然后#
@stephanmg您的系统可能与OP有不同的本地化设置。@Kent:是的,我试图鼓励OP思考排序
是如何工作的,或者研究手册/实现。@stephanmg哦。。。我不明白你的意图,我的错,对不起。好吧,肯特,那么这可能不是很明显。我只是认为这是一个很容易研究的问题,因为正如你也指出的,人们只需要使用man
。(我应该先彻底检查哪一个)