Bash 对于后跟下划线的大写字母,sort命令无法按预期工作

Bash 对于后跟下划线的大写字母,sort命令无法按预期工作,bash,sorting,collation,collate,Bash,Sorting,Collation,Collate,我正在整理用户名列表。当字母为小写时,sort命令按预期工作 小写字母的预期和实际输出: n n_123 na na_123 当字符为大写,后跟下划线时,事情会变得很奇怪 大写字母的预期输出: N N_123 NA NA_123 使用排序的大写实际输出: N NA NA_123 N_123 N NA NA_123 N_123 我想我可以用电脑解决这个问题 env LC_COLLATE=C sort $file 但是没有骰子 使用env LC\u COLLATE=C排序的实际输出: N

我正在整理用户名列表。当字母为小写时,sort命令按预期工作

小写字母的预期和实际输出:

n
n_123
na
na_123
当字符为大写,后跟下划线时,事情会变得很奇怪

大写字母的预期输出:

N
N_123
NA
NA_123
使用排序的大写实际输出:

N
NA
NA_123
N_123
N
NA
NA_123
N_123
我想我可以用电脑解决这个问题

env LC_COLLATE=C sort $file
但是没有骰子

使用env LC\u COLLATE=C排序的实际输出:

N
NA
NA_123
N_123
N
NA
NA_123
N_123
我正在Mac OS X 10.12.3上运行GNU bash,版本4.4.12(1)-发行版(x86_64-apple-darwin16.3.0)


任何帮助都将不胜感激。

下划线是ASCII
95
,它位于所有大写字母(
A-Z
)之后,即
65-90
。因此,在排序时,大写字母总是排在
之前

如果要在
\uu
处划界,则可以使用
-t
获得预期输出:

sort -t _ -k1,1 file
N
N_123
NA
NA_123

排序
命令处理小写字母的原因是,小写字母位于
\uucode>之后,即
97-122
下划线是ASCII
95
,它位于所有大写字母(
A-Z
)之后,即
65-90
。因此,在排序时,大写字母总是排在
之前

如果要在
\uu
处划界,则可以使用
-t
获得预期输出:

sort -t _ -k1,1 file
N
N_123
NA
NA_123

sort
命令使用小写字母的原因是因为小写字母位于
\uu
之后,即
97-122

谢谢您的输入。我使用自制软件,我的排序版本是sort(GNU coreutils)5.93。顺便说一句,您不需要
env
--
LC\u COLLATE=C sort
将shell导出
LC\u COLLATE
,值为
C
,仅在
sort
命令执行期间。谢谢您的输入。我使用自制软件,我的排序版本是sort(GNU coreutils)5.93。顺便说一句,您不需要
env
--
LC\u COLLATE=C sort
将shell导出
LC\u COLLATE
,值
C
仅在
sort
命令执行期间使用。很好,这很有意义,而且它工作得很好。谢谢你的帮助。太好了,这是有道理的,而且效果很好。谢谢你的帮助。