GNU区分大小写


35

sortUbuntu 10.04(Lucid)中的实用程序始终按不区分大小写的顺序进行排序,就像您对其进行指定--ignore-case一样。

The two sort just give the same result: 

echo -e "c\nb\nB\na" | sort
echo -e "c\nb\nB\na" | sort --ignore-case

但有时我想按区分大小写的顺序进行排序,因此大写字母排在首位,然后是小写字母。可能吗?

Answers:


31

覆盖整理顺序。

echo -e "c\nb\nB\na" | LC_COLLATE=C sort

5
这是可行的,但根据定义,只有没有外国字符时才行。在玩;它们将 7位ASCII字母之后排序;尝试一下echo $'B\nÄ\nb\na' | LC_COLLATE=C sortsort具有非C语言环境的GNU 总是执行不区分大小写的排序不是一个错误吗?
mklement0 2014年

关于“外来字符”,C.UTF-8语言环境(LC_COLLATE=C.UTF-8)将区分大小写,而“正常”对待非ascoi UTF-8字符。不幸的是,它在glibc的上游不可用,只有Debian,Ubuntu及其衍生产品才进行了修补。
aplaice

13

有趣的是,还有另一个排序顺序,如下所示:

echo -e "c\nb\nB\na" | LC_COLLATE=C sort --ignore-case

它将大写字母放在其对应的小写字母之前。

这是在en_US.UTF-8区域设置中它们输出的比较(我添加了“ d”和“ D”)(除非被覆盖):

  1. echo -e "d\nD\nc\nb\nB\na" | sort
  2. echo -e "d\nD\nc\nb\nB\na" | sort --ignore-case
  3. echo -e "d\nD\nc\nb\nB\na" | LC_COLLATE=C sort
  4. echo -e "d\nD\nc\nb\nB\na" | LC_COLLATE=C sort --ignore-case

输出:

1   2   3   4
-   -   -   -
a   a   B   a
b   b   D   B
B   B   a   b
c   c   b   c
d   d   c   D
D   D   d   d

有趣; 我在GNU sort v5.93(OS X 10.9.3(!)附带)中看到了这种现象v8.13,而在v8.21和中却没有v8.22。我猜2.和4.的结果仍然可以认为是等效的(但是随着外来字符的添加,这显然会改变)。
mklement0 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.