Supprimer les lignes correspondant à une regex
Filtrez les lignes par motif : avec ^DEBUG\b, un journal de cinq lignes perd ses 2 lignes DEBUG et garde intactes les 3 lignes INFO et ERROR. Vous voyez aussi combien de lignes ont été retirées et conservées. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Motif
- ^DEBUG\b
- Texte
- INFO Server started ERROR Connection lost INFO Server ready
- Nombre supprimé
- 2
- Nombre conservé
- 3
Supprimer les lignes correspondant à une regex filtre un texte multiligne en testant chaque ligne séparément avec une expression régulière, puis en écartant toutes les correspondances. Cet outil convient lorsque les lignes à retirer partagent un motif : niveau de journal, commentaire généré, horodatage, préfixe d’identifiant ou type d’enregistrement structuré. Le résultat conserve à l’identique chaque ligne restante, y compris sa terminaison d’origine, et indique le nombre de lignes supprimées et gardées afin que vos traitements automatisés puissent contrôler la modification.
Rédigez un motif pour la ligne que vous souhaitez supprimer
Placez le texte source dans text et une expression régulière JavaScript dans pattern. Saisissez l’expression sans barres obliques de délimitation : utilisez par exemple <code>^DEBUG\b</code>, et non <code>/^DEBUG\b/</code>. Chaque ligne est contrôlée séparément et supprimée dès qu’une de ses parties correspond.
Ajoutez <code>^</code> si le texte recherché doit se trouver au début, <code>$</code> s’il doit se trouver à la fin, et les deux si la ligne entière doit respecter la règle. Le motif <code>^\s*#</code> retire les lignes dont le premier caractère non blanc est un croisillon, tandis que <code>temporary$</code> retire celles qui se terminent par ce mot. La recherche distingue les majuscules des minuscules et emploie la syntaxe JavaScript standard.
Commencez par un motif précis, examinez les compteurs et le texte filtré, puis élargissez-le seulement si le résultat confirme la sélection attendue.
Maîtrisez le traitement des fins de ligne et des lignes vides
Le filtre reconnaît les sauts de ligne Unix, les couples retour chariot–saut de ligne Windows et les retours chariot isolés. Il conserve la terminaison d’origine attachée à chaque ligne restante : une entrée mixte ou propre à une plateforme n’est donc jamais normalisée en silence. L’expression régulière porte uniquement sur le contenu de la ligne ; les caractères de fin de ligne ne participent pas à la correspondance.
Une ligne vide est une véritable ligne et peut être supprimée avec <code>^$</code>. Si la source se termine par un saut, ce délimiteur reste attaché à la ligne précédente conservée, sauf si celle-ci est elle-même supprimée. Retirer la dernière ligne non terminée peut ainsi laisser intact le délimiteur précédent, conformément aux octets de la ligne gardée.
Une source vide compte comme une ligne vide. Aucun retrait d’espaces, changement de casse ou nettoyage des blancs n’est effectué.
Filtrez journaux, code et pipelines de façon déterministe
Cette capacité prépare efficacement des données avant comparaison, indexation, contrôle ou importation. Dans des journaux, vous pouvez retirer des contrôles d’état connus ou un préfixe de gravité trop fréquent avant de transmettre les événements utiles à un analyste. Dans du code généré, éliminez les commentaires d’en-tête stables avant de comparer des versions.
Dans une exportation structurée, retirez les enregistrements dont le préfixe désigne un en-tête, un pied ou une catégorie indésirable. Le même algorithme déterministe fonctionne sans réseau : une entrée identique produit toujours une sortie identique. L’expression est compilée une seule fois, mais les répétitions imbriquées ambiguës peuvent rester coûteuses.
Pour de grandes entrées, privilégiez des motifs précis et ancrés. Contrôlez le texte renvoyé et utilisez les compteurs comme garde-fou ; arrêtez par exemple un déploiement si un nettoyage censé retirer une ligne en signale des centaines.
Cas d’usage
Éliminer le bruit des journaux
Écartez les lignes récurrentes de débogage, de contrôle d’état ou de surveillance tout en gardant les événements à examiner.
Nettoyer du code source généré
Retirez commentaires d’en-tête, marqueurs de générateur ou lignes propres à un environnement avant d’étudier les différences utiles.
Filtrer des enregistrements par ligne
Excluez en-têtes, pieds, commentaires ou préfixes indésirables d’une exportation avant l’étape suivante.
Questions fréquentes
Quelle syntaxe d’expression régulière est acceptée ?
La syntaxe des expressions régulières JavaScript est utilisée. Saisissez le motif sans barres de délimitation.
Le motif inclut-il le caractère de saut de ligne ?
Non. Chaque expression porte sur le contenu d’une ligne et exclut sa terminaison.
Les lignes correspondantes deviennent-elles des lignes vides ?
Non. Les lignes trouvées et leurs terminaisons sont retirées ; les autres restent inchangées.
Peut-on supprimer les lignes vides ou composées d’espaces ?
Oui. Employez ^$ pour une ligne vide ou ^\s*$ pour une ligne contenant uniquement des blancs.
Comment supprimer uniquement les lignes qui commencent par un mot ?
Placez ^ devant le mot, comme dans ^DEBUG. Sans ce signe, toute ligne qui contient le mot à n'importe quelle position est supprimée. La comparaison distingue les majuscules des minuscules : DEBUG et debug sont différents.
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/remove-lines-matching \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"INFO Server started\nDEBUG Cache miss\nERROR Connection lost\nDEBUG Retrying\nINFO Server ready","pattern":"^DEBUG\\b"}'const res = await fetch("https://api.kit.forhosting.com/str/remove-lines-matching", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "INFO Server started\nDEBUG Cache miss\nERROR Connection lost\nDEBUG Retrying\nINFO Server ready",
"pattern": "^DEBUG\\b"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/remove-lines-matching",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "INFO Server started\nDEBUG Cache miss\nERROR Connection lost\nDEBUG Retrying\nINFO Server ready",
"pattern": "^DEBUG\\b"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/remove-lines-matching", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"INFO Server started\\nDEBUG Cache miss\\nERROR Connection lost\\nDEBUG Retrying\\nINFO Server ready","pattern":"^DEBUG\\\\b"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"INFO Server started\nDEBUG Cache miss\nERROR Connection lost\nDEBUG Retrying\nINFO Server ready","pattern":"^DEBUG\\b"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/remove-lines-matching", 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": "INFO Server started\nDEBUG Cache miss\nERROR Connection lost\nDEBUG Retrying\nINFO Server ready",
"pattern": "^DEBUG\\b"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.remove_lines_matching",
"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
Rédigez un motif pour la ligne que vous souhaitez supprimer
Dans JSON, les échappements suivent les règles habituelles : une barre oblique inverse est donc doublée dans une requête JSON brute.
Maîtrisez le traitement des fins de ligne et des lignes vides
La réponse fournit removed_count et kept_count, ce qui permet à un script de refuser une modification trop large.
Filtrez journaux, code et pipelines de façon déterministe
Une syntaxe incorrecte est rejetée avec <code>invalid_input</code> au lieu de livrer un texte partiellement filtré. Chaque requête API coûte $0.002 ; la version navigateur s’exécute localement.
Questions techniques
Que se passe-t-il si le motif est incorrect ?
La requête échoue avec une erreur invalid_input qui signale une expression régulière incorrecte.
Quel est le prix d’une requête API ?
Chaque requête API coûte $0.002. Le filtrage interactif est également proposé dans le navigateur.