Настройка LC_COLLATE = C
не всегда достаточна для сортировки прописных букв перед строчными. Возможно, вам потребуется установить LC_ALL = C
.
Это также будет учитывать не буквенно-цифровые и даже непечатаемые символы, но если вы не хотите, чтобы были варианты -d
и -i
(описанные в man sort
), чтобы отключить это.
Скорее всего, это приведет к серьезному сбою при вводе многобайтовых символов, таких как UTF-8 с символами, отличными от ASCII.
Чтобы получить строчные буквы (по порядку) перед прописными (по порядку), лучший способ, который я могу придумать, не требующий выхода из полноценного языка программирования, - это инвертировать регистр всех букв перед сортировкой, и инвертируя их потом.
tr 'a-zA-Z' 'A-Za-z' < file | LC_ALL=C sort | tr 'a-zA-Z' 'A-Za-z'