我有一个示例文件,每个文件中包含“aA0_-”字符。使用GNU排序对其进行排序可得到以下排序顺序:
$ cat /tmp/sample | sort
_
-
0
a
A
在追加其他字符后,我们获得了不同的顺序(非字母数字字符似乎具有较低的优先级):
$ cat /tmp/sample | sed 's/$/x/' | sort
0x
ax
Ax
x
_x
-x
当我们将这个字符插入到开头时,我们获得原始的排序顺序:
$ cat /tmp/sample | sed 's/^/x/' | sort
x
x_
x-
x0
xa
xA
..这种行为的解释是什么?
更新
当样本中包含“z
”和“Z
”字符时,结果似乎有点陌生:
$ cat /tmp/sample | sed 's/$/x/' | sort
0x
ax
Ax
x
_x
-x
zx
Zx
..但是根据正确的答案,是这样的,因为所有“”,“
_
”和“-
”都是当前区域设置中的空格(en_US .UTF-8)并且在排序时不会被忽略。
答案 0 :(得分:4)
您的语言环境文件应包含LC_COLLATE的定义。 这决定了字符的排序顺序。 还要检查LC_CTYPE的定义,以及哪些字符被分类为“空格”。
如果' - '和'_'被归类为空格,您可能会找到您显示的结果。