回答:
照合順序をオーバーライドします。
echo -e "c\nb\nB\na" | LC_COLLATE=C sort
C.UTF-8ロケール(LC_COLLATE=C.UTF-8)は大文字と小文字を区別してソートしますが、非ASCII UTF-8文字を「通常」処理します。残念ながら、glibcのアップストリームでは利用できず、Debian、Ubuntu、および派生物によってのみパッチが適用されます。
興味深いことに、さらに次のようなソート順が利用可能です。
echo -e "c\nb\nB\na" | LC_COLLATE=C sort --ignore-case
これは、対応する小文字の前に大文字を置きます。
en_US.UTF-8ロケールでの出力の比較(「d」と「D」を追加しました)(オーバーライドされている場合を除く):
echo -e "d\nD\nc\nb\nB\na" | sortecho -e "d\nD\nc\nb\nB\na" | sort --ignore-caseecho -e "d\nD\nc\nb\nB\na" | LC_COLLATE=C sortecho -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
sort v5.93(OS X 10.9.3(!)に付属)およびv8.13で見られますが、v8.21とではありませんv8.22。2.と4.の結果はまだ同等であると考えることができます(ただし、外部文字を追加すると明らかに変化します)。
echo $'B\nÄ\nb\na' | LC_COLLATE=C sort。ロケールsortを持たないGNU が常に大文字と小文字を区別しないソートを実行するという事実をバグと見なすべきではありませんか?C