Bash: 'sort' 命令如何对路径进行排序?

5

sort是如何工作的?我有这个文件:

/test# cat foobar
html/lib/ORM/aaa.php
html/lib/ORMBase/ormbase_aaa.php
html/lib/ORM/zzz.php
html/lib/ORMBase/ormbase_zzz.php

这是 sort 命令的输出结果:

/test# cat foobar | sort
html/lib/ORM/aaa.php
html/lib/ORMBase/ormbase_aaa.php
html/lib/ORMBase/ormbase_zzz.php
html/lib/ORM/zzz.php

我尝试了很多选项: -f-i-t/......,但我还是无法理解。我想知道为什么 sort 认为这个已经排序好了。
注:对于这个其他样本,它可以正常工作。
/test# cat foobar2
a/a/a
a/ab/a
a/ab/b
a/a/ab
a/abc/a

/test# cat foobar2 | sort
a/a/a
a/a/ab
a/ab/a
a/ab/b
a/abc/a

cat a | sort 中,a 是什么意思? - user2314737
1个回答

9

sort 希望在本地化方面变得更加聪明。它会忽略一些非字母数字的字符,例如 / 等。man 页面上有一句简短的警告:

* 警告 * 环境中指定的区域设置会影响排序顺序。将 LC_ALL=C 设置为获取使用本机字节值的传统排序顺序。

所以,要解决您的问题:

$ cat foobar | LC_ALL=C sort

@KarolyHorvath 谢谢!我已经注意到并在此期间进行了更正。 - Boldewyn
1
很好,我学到了一些东西!非常感谢 :) 最糟糕的部分是,在发问之前我实际上已经阅读了手册,但没有看到这一部分...我的错。 - 4wk_
没问题。尽管有“警告”,但实际上很容易忽略(特别是该设置的后果)。 - Boldewyn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接