Trier des lignes : trier du texte alphabétiquement en ligne
Collez une liste, choisissez un ordre, vous l'obtenez triée. Avec ou sans distinction de casse, ascendant ou descendant, avec natural sort pour les noms de fichiers et les chaînes de version.
Qu'est-ce que l'outil de tri de lignes ?
Un outil gratuit qui tourne dans le navigateur, prend un bloc de texte, le découpe sur les sauts de ligne, trie les lignes et vous renvoie le résultat. Pas d'inscription, pas d'envoi, rien ne quitte votre machine. Coller, cliquer, copier.
Cela revient à exécuter sort en ligne de commande, sauf que vous n'avez pas à vous battre avec LC_COLLATE, le fait que macOS embarque un vieux sort BSD, ou le fait que Windows n'a tout simplement pas de sort sans installer Git Bash. Trois cases couvrent les cas que vous voulez vraiment : ascendant ou descendant, avec ou sans distinction de casse, et natural sort pour que file2 arrive avant file10.
Si vous avez déjà collé une liste de dépendances dans package.json en vous demandant pourquoi npm les a réordonnées au prochain install, cet outil reproduit ce que fait npm 7+ pour que le diff soit vide quand la CI tourne.
Comment le sort fonctionne réellement
Sous le capot, l'outil utilise l'API Intl.Collator du navigateur. Cela vous donne une fonction de comparaison consciente d'Unicode, telle que la définit l'Unicode Collation Algorithm (UTS #10), et non une comparaison brute par codepoint. Différence pratique : Intl.Collator sait que é se trie à côté de e, que le ß allemand est égal à ss au niveau primaire, et que majuscules et minuscules ne diffèrent qu'au niveau tertiaire.
Le sort lexicographic et le sort qui respecte la locale ne sont pas la même chose. Un sort purement par codepoint (ce que donne LC_ALL=C sort) place toutes les majuscules avant toutes les minuscules, parce que A est U+0041 et a est U+0061. Un sort avec la collation Unicode par défaut les entrelace : A < a < B < b < C. Par défaut on utilise l'ordre conscient de la locale, parce qu'il correspond à ce que les gens attendent quand ils cliquent sur Trier A-Z dans Excel ou Google Sheets. Cochez la case casse sensible pour retomber sur l'ordre style codepoint.
Natural sort est le troisième axe. Activé, file2.log arrive avant file10.log parce que les nombres intégrés sont comparés comme des nombres, pas caractère par caractère. Wikipédia a une explication propre de l'ordre naturel si vous voulez le contexte. L'implémentation utilise l'option numeric: true de Intl.Collator, la même primitive que Finder, l'Explorateur Windows et les versions récentes de GNU sort -V.
Comment trier des lignes en trois étapes
Un panneau en entrée, un panneau en sortie. Tout tourne en local ; fermez l'onglet et votre texte disparaît.
- 1
Collez vos lignes
Déposez votre liste dans l'éditeur, un élément par ligne. Les lignes vides en fin de bloc ne posent pas de problème. CRLF et LF fonctionnent tous les deux ; la sortie est normalisée en LF sauf indication contraire. Le bouton Sample remplit l'éditeur avec une petite liste mixte si vous voulez voir les trois options en action d'abord.
- 2
Choisissez les options de sort
Choisissez Ascendant ou Descendant, basculez Casse sensible si vous avez besoin que Apple arrive avant banana, et activez Natural sort quand des noms de fichiers ou des versions sont mêlés. Supprimer les lignes vides retire les lignes vides avant le tri ; Supprimer les doublons regroupe les répétitions.
- 3
Copiez le résultat trié
Cliquez sur Sort. Le résultat apparaît dans le panneau de sortie. Utilisez Copier pour le mettre dans le presse-papiers, ou Télécharger pour le sauvegarder en fichier .txt. Le compteur de lignes en en-tête montre combien de lignes sont sorties, ce qui est utile quand vous activez la déduplication et voulez savoir combien de doublons ont été retirés.
Quand trier des lignes est l'outil adapté
Trier une liste d'emails avant l'envoi d'une campagne
Le marketing colle un CSV d'emails d'abonnés dans l'outil de campagne, mais la liste est arrivée dans l'ordre d'inscription. Triez-la d'abord alphabétiquement ici, avec la casse insensible activée (puisque la partie locale d'un email est insensible à la casse en pratique), puis dédupliquez. L'import dans l'outil de campagne sera plus rapide et vous repérerez immédiatement un domaine mal tapé comme gmial.com parce qu'il sera juste à côté du bloc gmail.com légitime.
Alphabétiser des noms de classes CSS ou l'ordre des attributs HTML
Certaines équipes imposent des noms de classes alphabétiques dans les attributs class="..." pour garder les diffs de PR propres. Collez la valeur, triez, recollez. La même astuce vaut pour l'ordre des attributs HTML quand un linter râle, ou pour trier à la main des classes utilitaires Tailwind quand vous n'avez pas prettier-plugin-tailwindcss installé dans le repo.
Trier un .gitignore pour des PR futurs au diff propre
Un .gitignore auquel tout le monde ajoute des lignes devient un capharnaüm. Triez-le alphabétiquement une fois, committez, et ensuite les ajouts atterrissent à des endroits évidents et le diff a du sens pour les relecteurs. Pareil pour .dockerignore, .eslintignore, et le tableau files de tsconfig.json quand les équipes en maintiennent un.
Nettoyer une liste de TODO collée depuis le chat
Slack et Discord collent des listes au tri bizarre, avec des lignes à moitié vides et des doublons de gens qui ont dit la même chose deux fois. Collez, activez Supprimer les lignes vides et Supprimer les doublons, triez. Vous obtenez une liste propre et ordonnée à déposer dans votre suivi de tâches.
Trier une liste de codes pays, aéroports ou devises
Codes pays ISO 3166, codes aéroports IATA, codes devises ISO 4217 : tous vivent dans des fichiers de lookup qui gagnent à être triés. Natural sort est inutile ici puisque les codes ont une longueur fixe, mais l'insensibilité à la casse importe parce que certaines sources mélangent USD et usd. Triez, dédupliquez, recollez dans la table de lookup.
Trier une liste de dépendances de package.json
Les clés de dépendances de package.json sont alphabétisées par npm 7+ à chaque install, mais si vous bossez sur un projet encore figé sur npm 6 (ou yarn 1) l'ordre ne changera pas tout seul. Collez les clés de dépendances, triez A-Z, recollez. Votre prochaine PR n'aura pas un commit de réordonnancement de 200 lignes par-dessus le vrai changement.
Trier des lignes : référence rapide
Une petite antisèche des options de sort exposées par cet outil et des cas limites qu'elles couvrent.
| Topic | What this tool does |
|---|
| Lexicographic vs collation | Le sort lexicographic (par codepoint) ordonne par valeur Unicode brute : A (U+0041) avant a (U+0061). Le sort par collation suit l'Unicode Collation Algorithm et entrelace les casses. Cet outil utilise la collation par défaut ; cochez Casse sensible pour l'ordre par codepoint. |
|---|
| Sensibilité à la casse | Par défaut insensible : apple, Apple et APPLE comparent égaux. Passez en sensible pour l'ordre A < a < B < b au niveau tertiaire de la collation, ou pour l'ordre brut par codepoint quand combiné avec la locale C. |
|---|
| Natural sort | Activé, file2 < file10 parce que 2 et 10 sont comparés comme des nombres. Désactivé, file10 < file2 parce que 1 (U+0031) compare inférieur à 2 (U+0032) caractère par caractère. Utilisez-le pour les noms de fichiers, les chaînes de version, et toute liste avec des nombres intégrés. |
|---|
| Conscience de la locale | Le sort respecte la locale de la page : é ordonne à côté de e en français, ä allemand trie comme ae dans l'ordre annuaire DIN 5007-2, etc. La commande sort d'unix fait pareil si LC_COLLATE est défini ; LC_ALL=C sort retombe sur l'ordre par codepoint, plus rapide mais traite les accents comme des lettres étrangères. |
|---|
| Traitement des lignes vides | Les lignes vides trient avant toute ligne non vide en ordre ascendant, donc elles se regroupent en haut. Cochez Supprimer les lignes vides pour les retirer entièrement. Un saut de ligne final en bout d'entrée est conservé tel quel pour que la sortie passe par cat et outils similaires sans surprise. |
|---|
| Stabilité | Le sort est stable : les lignes qui comparent égales selon vos réglages gardent leur ordre relatif d'origine. Cela compte quand vous triez sur un préfixe ou en mode insensible à la casse et voulez préserver l'ordre d'entrée à l'intérieur d'un groupe d'égalité. V8 (Chrome, Edge, Node) comme SpiderMonkey (Firefox) garantissent un Array.prototype.sort stable depuis 2019. |
|---|
| Fins de ligne (LF vs CRLF) | L'entrée est découpée sur \r\n, \n et \r. La sortie est jointe avec \n par défaut donc elle se colle proprement dans des flux Linux et macOS. Si vous avez besoin de CRLF pour un outil Windows, collez le résultat dans un éditeur conscient de Windows et sauvegardez avec la fin de ligne voulue. |
|---|
| Encodage | L'entrée est traitée comme UTF-8 (le texte dans le navigateur est déjà décodé). Un BOM UTF-8 en tête est conservé sur la première ligne s'il est présent ; si vous voulez le retirer, l'outil sœur whitespace-cleaner le supprime. |
|---|
Trier des lignes : questions fréquentes
Quel est l'ordre de tri par défaut ?
Ascendant conscient de la locale, en utilisant Intl.Collator du navigateur avec la locale de la page. Cela donne A < a < B < b comme trient Excel et Google Sheets, pas l'ordre brut par codepoint où chaque majuscule passe avant chaque minuscule. Si vous voulez l'ordre par codepoint, cochez l'option Casse sensible, qui bascule le collator en comparaison stricte au niveau tertiaire et donne le même ordre que LC_ALL=C sort.
Le sort est-il sensible à la casse ou non ?
Insensible par défaut. Apple, apple et APPLE se réduisent à la même clé, donc ils se regroupent dans la sortie et leur ordre relatif est celui du premier apparu en entrée (le sort est stable). Cochez Casse sensible pour les séparer, auquel cas APPLE, Apple et apple sont triés comme trois valeurs distinctes selon le niveau tertiaire de la collation Unicode par défaut.
Supporte-t-il le natural sort pour des noms comme file2 avant file10 ?
Oui. Activez l'option Natural sort et les nombres intégrés sont comparés comme des nombres, donc file2.log arrive avant file10.log, et v1.9 avant v1.10. L'implémentation est l'option numeric: true sur Intl.Collator, la même primitive que Finder de macOS et l'Explorateur Windows utilisent pour ordonner les noms de fichiers.
Puis-je trier à l'envers (Z à A) ?
Oui. Choisissez Descendant dans le sélecteur d'ordre. Le sort tourne d'abord en ordre ascendant, puis on l'inverse, ce qui préserve la stabilité sur les clés égales : si deux lignes comparent égales selon vos réglages de casse et natural sort, elles gardent leur ordre relatif d'origine même après l'inversion. Cela compte quand vous triez sur une clé partielle comme la première colonne d'un TSV.
Que devient-il des lignes en double et des lignes vides ?
Par défaut les deux sont conservées. Le sort est stable, donc les doublons gardent leur ordre relatif d'origine, et les lignes vides se regroupent en haut en ordre ascendant (elles trient avant toute chaîne non vide). Cochez Supprimer les lignes vides pour les retirer avant le tri, et Supprimer les doublons pour fusionner les lignes égales en une. Pour une passe de dédup dédiée avec plus d'options, utilisez Supprimer les lignes en double.
Y a-t-il une limite de taille ?
Jusqu'à environ 100 000 lignes, ça tourne en moins d'une seconde dans le navigateur. Au-delà de 500 000 vous commencez à le sentir, surtout parce que le rendu du panneau de résultat (pas le sort lui-même) devient coûteux. Pour des fichiers de plusieurs millions de lignes, la commande sort d'unix avec LC_ALL=C sort -u file.txt est plus rapide et travaille hors mémoire. Le manuel sort de GNU coreutils couvre les flags qui valent la peine d'être connus.
Confidentialité et fonctionnement
Votre texte ne quitte jamais votre navigateur. Le découpage, la comparaison et le join tournent tous en local. Pas d'analytique sur votre entrée, pas de logs, pas d'aller-retour serveur. La comparaison elle-même est l'Intl.Collator natif du navigateur, qui implémente l'Unicode Collation Algorithm (UTS #10). Si vous voulez de la lecture de fond, Wikipédia a une vue d'ensemble solide des algorithmes de tri en général.