回答:
照合順序をオーバーライドします。
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" | sort
echo -e "d\nD\nc\nb\nB\na" | sort --ignore-case
echo -e "d\nD\nc\nb\nB\na" | LC_COLLATE=C sort
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
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