Trouver les lignes communes de deux textes
Comparez apple, banana, cherry, banana, pear avec pear, banana, orange, banana et obtenez banana et pear : chaque ligne commune une seule fois, dans l'ordre de la première liste. La comparaison est exacte par défaut, avec une option pour ignorer la casse. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Texte a
- apple banana cherry banana pear
- Texte b
- pear banana orange banana
- Texte
- banana pear
- Lignes communes
- banana, pear
- Nombre en commun
- 2
- Lignes du texte A
- 5
Trouver le chevauchement entre deux listes collées ne devrait nécessiter ni formule de tableur, ni pipeline shell, ni vérification manuelle fastidieuse. Cet outil compare deux textes multiligne et renvoie les lignes uniques présentes dans les deux. Le résultat suit l’ordre du premier texte, ce qui le rend prévisible et facile à intégrer dans un autre processus. La comparaison est exacte par défaut : espaces, ponctuation et casse restent significatifs. Un mode facultatif insensible à la casse peut faire correspondre Apple et apple tout en conservant l’orthographe du premier texte.
Fonctionnement de la comparaison des lignes communes
La capacité considère chaque entrée comme une suite de lignes et calcule leur intersection ensembliste. Elle commence par convertir les fins de ligne contenant un retour chariot en simples sauts de ligne. Une liste Windows et une liste Unix peuvent ainsi être comparées sans faux écarts dus uniquement au format du fichier.
Chaque ligne du second texte devient une clé de recherche. Le premier texte est ensuite parcouru de haut en bas : une ligne est produite lorsque sa clé existe dans le second ensemble et n’a pas encore été produite. Chaque ligne partagée apparaît donc une seule fois, selon l’ordre de sa première occurrence dans le premier texte.
Par défaut, la comparaison est exacte : espaces initiaux ou finaux, ponctuation, accents et majuscules influent sur l’égalité. Les lignes vides sont des valeurs valides et apparaissent une fois si les deux entrées en contiennent.
Usages pratiques de l’intersection de listes
La recherche de lignes communes est utile dès que deux systèmes exportent une valeur par ligne et que vous devez connaître leur chevauchement. Une personne chargée des versions peut comparer les paquets de deux déploiements afin d’identifier les dépendances partagées. Une équipe d’analyse peut coller des segments de clientèle issus de rapports distincts et obtenir les identifiants présents dans les deux sans transférer un classeur ni écrire une jointure.
Les équipes éditoriales peuvent comparer des mots-clés, des étiquettes ou des URL tout en conservant l’ordre prioritaire de la première source. Vous pouvez également croiser des listes de vocabulaire, de présence ou de références de stock. Pour les données sensibles, rappelez-vous que la comparaison est littérale, et non sémantique : elle ne détermine pas si deux domaines, noms ou chemins similaires désignent la même chose.
Elle ne supprime pas les espaces, ne normalise pas Unicode, ne trie pas les résultats, ne compte pas les répétitions et ne calcule pas les lignes propres à un seul côté. Ces choix évitent qu’un nettoyage silencieux fusionne des valeurs distinctes. Préparez vos listes au préalable si nécessaire, puis utilisez cette capacité pour une intersection transparente.
Le tableau convient aux applications et le texte joint au copier-coller immédiat.
Cas d’usage
Comparer des listes d’identifiants
Trouvez les comptes, produits ou clés présents dans deux exports tout en conservant l’ordre du premier.
Croiser des étiquettes et mots-clés
Repérez les étiquettes, requêtes ou catégories communes, avec une comparaison facultative sans tenir compte de la casse.
Contrôler des inventaires de déploiement
Comparez des inventaires de paquets ou services, à raison d’un par ligne, et obtenez les éléments uniques communs aux deux environnements.
Questions fréquentes
Les lignes communes répétées sont-elles renvoyées plusieurs fois ?
Non. Chaque ligne correspondante est renvoyée une fois, même si elle apparaît plusieurs fois dans l’une des entrées.
L’outil ignore-t-il les espaces autour d’une ligne ?
Non. Les espaces sont significatifs : une ligne avec des espaces finaux diffère de la même apparence sans ces espaces.
Dans quel ordre les lignes communes sont-elles listées ?
Dans l'ordre de leur première apparition dans le premier texte, jamais par ordre alphabétique ni selon la seconde liste. C'est pourquoi l'exemple donne banana avant pear, alors que pear vient en premier dans la seconde liste.
Des lignes qui ne diffèrent que par la casse peuvent-elles correspondre ?
Oui, activez l'option qui ignore la casse et Apple correspondra à apple. Le résultat garde l'orthographe du premier texte, vos majuscules d'origine ne sont donc pas perdues.
L'outil affiche-t-il aussi les lignes présentes dans une seule liste ?
Non. Il renvoie seulement l'intersection, c'est-à-dire les lignes présentes dans les deux textes. Il n'indique pas ce qui manque de chaque côté, ne trie pas le résultat et ne compte pas les répétitions.
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/common-lines \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text_a":"apple\nbanana\ncherry\npear","text_b":"banana\npear\norange"}'const res = await fetch("https://api.kit.forhosting.com/str/common-lines", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text_a": "apple\nbanana\ncherry\npear",
"text_b": "banana\npear\norange"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/common-lines",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text_a": "apple\nbanana\ncherry\npear",
"text_b": "banana\npear\norange"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/common-lines", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text_a":"apple\\nbanana\\ncherry\\npear","text_b":"banana\\npear\\norange"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text_a":"apple\nbanana\ncherry\npear","text_b":"banana\npear\norange"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/common-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_a": "apple\nbanana\ncherry\npear",
"text_b": "banana\npear\norange"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.common_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.
Limites
max_chars_per_text | 65536 |
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
Les fins de ligne Windows, Unix et des anciens Mac sont normalisées avant la comparaison, et la même fonction déterministe alimente le navigateur et l’API.
Fonctionnement de la comparaison des lignes communes
Avec ignore_case, seules les clés de comparaison passent en minuscules ; la valeur renvoyée conserve la graphie originale du premier texte. L’algorithme effectue des parcours linéaires bornés sans réseau, modèle, hasard ni horloge ; des entrées identiques produisent donc toujours le même JSON.
Choix des entrées et lecture du résultat
Chaque champ accepte jusqu’à 65,536 caractères. Le mode exact convient aux noms d’utilisateur sensibles à la casse, clés de configuration, empreintes, chemins et codes pour lesquels chaque caractère compte. Les doublons d’une source ne dupliquent jamais la sortie, car il s’agit d’une intersection d’ensembles et non d’un appariement d’occurrences. Envoyez text_a et text_b sous forme de chaînes non vides contenant les listes ou blocs de texte que vous souhaitez comparer. Séparez les éléments par des sauts de ligne et omettez ignore_case, ou laissez-le sur false, lorsque les identifiants doivent correspondre exactement. Activez ignore_case pour les catégories, produits, étiquettes ou listes de domaines dont les majuscules ne sont pas significatives. La réponse contient text, version jointe par des sauts de ligne et prête à copier ; common_lines, les mêmes valeurs sous forme de tableau JSON ; et common_count, le nombre de lignes communes uniques. Elle indique aussi le nombre de lignes normalisées des deux entrées et l’option ignore_case appliquée. L’ordre provient de text_a, pas de text_b ni d’un tri alphabétique. Une valeur absente, vide, non textuelle ou trop longue renvoie invalid_input. Un traitement API réussi coûte $0.002 par élément, tandis que le navigateur exécute localement la même logique pure.
Questions techniques
Quelle entrée détermine l’ordre du résultat ?
Le premier texte fixe l’ordre. Les lignes communes suivent leur première occurrence dans text_a.
Que modifie ignore_case ?
Cette option compare des clés en minuscules, mais conserve dans le résultat la graphie originale de text_a.
Combien coûte une requête API ?
Une requête API réussie coûte $0.002 par élément. La version web exécute localement la même logique déterministe.