Supprimer les lignes en double
apple, banana, apple, cherry, banana devient apple, banana, cherry : 2 lignes répétées supprimées et 3 lignes uniques gardées dans leur ordre d'apparition. Vous pouvez aussi traiter Apple et apple comme la même ligne. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Texte
- apple banana apple cherry banana
- Texte
- apple banana cherry
- Texte d'origine
- apple banana apple cherry banana
- Lignes d'origine
- 5
- Lignes uniques
- 3
Les lignes en double s'infiltrent dans les journaux, les listes de diffusion, les colonnes CSV exportées en texte brut, les historiques de shell, les extraits de code collés deux fois et les applications de notes où le même point a été copié plus d'une fois. Les nettoyer à la main est lent et source d'erreurs, surtout lorsque des différences de casse masquent de vrais doublons ou lorsque l'ordre compte et que vous devez conserver la première apparition plutôt que la dernière. Cet outil prend le texte multiligne que vous saisissez, le découpe en lignes et renvoie une chaîne dédupliquée déterministe qui préserve l'ordre d'origine des premières occurrences. Vous pouvez éventuellement ignorer la casse des lettres pour qu'Apple et apple comptent comme la même ligne tout en conservant la première casse que vous avez écrite. Une entrée vide est rejetée avec une erreur de validation claire au lieu de renvoyer silencieusement un résultat vide, ce qui protège les clients qui ont oublié de lier un champ.
Comment les doublons partent et l'option de casse
Le moteur normalise les styles de retour chariot afin que le CRLF Windows et le CR nu deviennent de simples séparateurs de nouvelle ligne, puis découpe la chaîne à chaque saut de ligne. Chaque ligne résultante — y compris les lignes vides intentionnelles — est candidate. La première fois qu'une ligne est vue, elle est conservée avec ses caractères d'origine ; toute ligne ultérieure correspondant à la clé de comparaison est écartée.
Par défaut la comparaison est exacte : espaces, ponctuation et casse comptent, de sorte que des espaces de fin ou Apple versus apple sont des lignes distinctes. Les comptes de lignes supprimées et de lignes uniques sont renvoyés avec le texte nettoyé afin que tableaux de bord et tests puissent vérifier l'ampleur du changement.
Comme le chemin est une arithmétique de parse pure sur des chaînes — un seul parcours linéaire avec un ensemble de hachage des clés vues —, la latence reste sous la milliseconde pour des tailles de formulaire typiques et le modèle de coût publié est analytique plutôt que basé sur des jetons de modèle. Il n'y a pas de correspondance floue, de seuil de distance d'édition ni d'étape d'embeddings sémantiques ; cela relève d'autres outils, comme la déduplication sémantique CSV lorsque les lignes se ressemblent sans être égales en texte.
Où la suppression des lignes en double apparaît dans le travail réel
Les développeurs qui nettoient des extraits de journaux et des dumps d'historique shell ont besoin d'une liste unique de première occurrence avant de coller dans des tickets ou des rapports de bogues. Les équipes data qui exportent une seule colonne en texte brut veulent souvent des valeurs uniques sans ouvrir un tableur complet ni écrire un script awk jetable.
Les éditeurs de contenu qui consolident listes d'étiquettes, noms de catégories et entrées de glossaire utilisent le mode insensible à la casse pour que les variantes d'orthographe se regroupent tout en conservant la première casse préférée. Élèves et enseignants préparent listes de vocabulaire et jeux de lignes de corrigé sans répétitions accidentelles du copier-coller. Les administrateurs systèmes fusionnent listes de blocage et d'autorisation de plusieurs sources et ont besoin d'un ensemble unique déterministe qui ne réordonne pas les entrées de confiance antérieures.
Si vous avez ensuite besoin d'une déduplication CSV au niveau des lignes avec clés de colonnes, d'une fusion sémantique floue de lignes quasi doubles ou d'un hachage binaire d'images en double, traitez-les comme des intentions de recherche et des pages d'atterrissage distinctes plutôt que de surcharger cette page supprimer-lignes-en-double.
Cas d’usage
Nettoyer extraits de journaux et d'historique
Collez des journaux multilignes ou un historique shell et conservez la première occurrence de chaque ligne pour des tickets et rapports courts sans perdre l'ordre.
Listes uniques d'étiquettes et de vocabulaire
Fusionnez les étiquettes ou lignes de glossaire répétées, en ignorant éventuellement la casse, tout en préservant la première orthographe préférée.
Questions fréquentes
Comment les lignes en double sont-elles détectées ?
Le texte est découpé sur les sauts de ligne après normalisation CRLF. La première occurrence est conservée ; les correspondances ultérieures sont écartées.
Les lignes vides sont-elles préservées ?
Oui. Une ligne vide est une valeur de ligne valide. La première ligne vide est conservée ; les lignes vides supplémentaires sont traitées comme des doublons de cette ligne vide.
Que se passe-t-il si le texte est vide ?
Fournissez une chaîne non vide ; les cases vides sont des erreurs client et ne sont pas facturées.
Quel est le coût ?
L'outil navigateur est gratuit et s'exécute en local.
Quelle copie d'une ligne répétée est conservée ?
Toujours la première. Les copies suivantes sont supprimées et les lignes restantes gardent l'ordre de leur première apparition, si bien que les entrées en haut d'une liste ne bougent jamais.
Outils associés
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/str/dedupe-lines \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"apple\nbanana\napple\ncherry\nbanana"}'const res = await fetch("https://api.kit.forhosting.com/str/dedupe-lines", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "apple\nbanana\napple\ncherry\nbanana"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/dedupe-lines",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "apple\nbanana\napple\ncherry\nbanana"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/dedupe-lines", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"apple\\nbanana\\napple\\ncherry\\nbanana"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"apple\nbanana\napple\ncherry\nbanana"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/dedupe-lines", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"text": "apple\nbanana\napple\ncherry\nbanana"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.dedupe_lines",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |
Notes techniques
Comment fonctionne la déduplication de lignes et ce que signifie ignore_case
Lorsque ignore_case vaut true, la clé d'appartenance est la forme en minuscules Unicode de la ligne, tandis que la chaîne conservée reste la première orthographe d'origine que vous avez fournie, ce qui est l'attente habituelle pour nettoyer des listes de contacts et des dumps d'étiquettes sans réécrire les titres. Les charges utiles extrêmement longues au-delà du plafond de caractères documenté échouent avec invalid_input pour qu'une seule requête ne monopolise pas la mémoire du Worker.
Ce que vous envoyez et ce que vous recevez
Envoyez un champ obligatoire nommé text contenant la chaîne multiligne non vide à nettoyer. Les nombres et booléens utilisés comme corps de texte sont convertis en formes décimales ou true/false ; les objets, tableaux, NaN et Infinity sont rejetés. Un texte vide échoue à la validation avant toute construction d'ensemble et n'est pas facturé. Des alias tels que input, value, data, s, message, string, content et body sont acceptés pour faciliter le branchement de clients plus anciens. Envoyez éventuellement ignore_case comme booléen ou sous les formes de chaîne courantes true, false, yes, no, one ou zero. En cas de succès la réponse renvoie text comme chaîne dédupliquée, original comme chaîne d'entrée pour l'écho et le débogage, original_lines, unique_lines, removed_lines, l'indicateur ignore_case résolu et operation fixé à dedupe_lines. Les contrôles classiques incluent une liste de fruits avec banana et apple répétés se réduisant à trois lignes uniques, une liste à casse mixte qui se compacte davantage lorsque ignore_case est true, et une seule ligne unique qui traverse inchangée avec removed_lines égal à zéro. Le tarif des appels API réussis est la base publiée de $0.002 par élément ; les échecs de validation, y compris le texte vide, ne consomment pas le solde prépayé.
Où la suppression des lignes en double apparaît dans le travail réel
Comme cette capacité est un moteur de parse pur, le tarif API est la base publiée de $0.002 par élément réussi et une validation échouée ne consomme pas le solde.
Cas d'intégration
Normaliser des colonnes d'export en texte
Transformez un dump texte brut d'une seule colonne en liste de lignes uniques pour fixtures, listes de blocage et QA sans ouvrir un tableur.
Questions techniques
ignore_case modifie-t-il l'orthographe conservée ?
Non. Seule la clé de comparaison est mise en minuscules. Le texte de ligne conservé est toujours la première orthographe d'origine que vous avez fournie.