7 votes

Trier avec la sensibilité à la casse (minuscules avant majuscules) sous MacOS dans le Terminal

J'essaie d'utiliser la réponse dans GNU Classer par ordre de majuscules et minuscules pour trier un fichier dans mon Mac OS.

Mon file.txt ressemble à ceci :

"Best"
"A"
"BEST"

Dans la deuxième réponse à la question mentionnée, il est dit que l'on peut faire :

echo -e "d\nD\nc\nb\nB\na" | sort --ignore-case file.txt

et le résultat devrait être :

"A"
"Best"
"BEST"

Cependant, lorsque je le fais sur mon ordinateur, j'obtiens :

"A"
"BEST"
"Best"

Peu importe que j'utilise l'option --ignore-case ou non, le résultat est le même.

Peut-être LC_COLLATE=C ne peut pas être défini dans Mac OS ?

Quelqu'un sait-il comment utiliser sort et que les minuscules < majuscules dans Mac OS ?

EDIT

@jaume a recommandé d'installer coreutils et en utilisant le tri GNU. J'ai essayé brew install coreutils et ensuite gsort -f file.txt mais n'a toujours pas eu de chance.

2voto

Michael Zhou Points 167

L'ordre de tri est défini dans votre locale .

locale            
LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL=

Lorsque LC_COLLATE est défini comme LC_COLLATE="en_US.UTF-8" sur MacOS, LC_COLLATE utilise la définition C ou POSIX. Le comportement par défaut de sort est de trier dans l'ordre ascii, les majuscules ayant la priorité sur les minuscules.

Sous Linux, lorsque LC_COLLATE="en_US.UTF-8", la définition de LC_COLLATE n'est pas standard. Le comportement par défaut de sort est d'ignorer la casse et les minuscules ont la priorité sur les majuscules.

Pour imiter la configuration par défaut de Linux sort sous MacOS, vous pouvez utiliser tr pour "traduire" les minuscules en majuscules et les majuscules en minuscules, trier avec la fonction ignore-case option ( -f ), puis de changer à nouveau de cas.

tr 'a-zA-Z' 'A-Za-z' <file.txt | sort -f | tr 'a-zA-Z' 'A-Za-z'

EXEMPLE :

cat file.txt
"cat"
"Best"
"A"
"BEST"
"Castro"
"alfred"
"a"
"CAT"

tr 'a-zA-Z' 'A-Za-z' <file.txt | sort -f | tr 'a-zA-Z' 'A-Za-z'
"a"
"A"
"alfred"
"Best"
"BEST"
"Castro"
"cat"
"CAT"

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X