Commande sed Sur les systèmes Linux, sed est un outil puissant utilisé par les administrateurs système et les développeurs pour une édition de texte rapide et flexible. Que vous souhaitiez remplacer des mots dans un fichier, supprimer des lignes spécifiques ou modifier du texte en bloc, sed propose des raccourcis clavier puissants qui simplifient le travail avec les fichiers texte. Apprendre à utiliser correctement cette commande vous aidera à accomplir des tâches complexes avec les commandes les plus simples. Dans cet article, nous passons en revue les principales méthodes pratiques d'utilisation de sed, avec des exemples concrets pour une application directe.
Sed, l'éditeur de flux, est l'un des outils d'édition de texte les plus populaires sous Linux. Sans interface, il exécute les opérations de manière fluide et silencieuse, directement depuis la ligne de commande. Des corrections rapides aux transformations de texte avancées, voici neuf façons dont Sed simplifie l'édition.
Table des Matières
cabillot1. Rechercher et remplacer du texte (de base et guidé)
Le remplacement de texte est l'utilisation la plus courante de sed. Je l'utilise souvent lorsque je travaille sur des fichiers volumineux dans un terminal, car je ne souhaite pas ouvrir un éditeur de texte distinct uniquement pour rechercher et remplacer du texte. Exécuter sed directement depuis le terminal augmente non seulement mon efficacité et ma rapidité, mais m'offre également davantage d'options de personnalisation que la boîte de dialogue classique de recherche et remplacement.
La structure de base de la recherche et du remplacement de texte est simple.
fichier sed 's/old/new/'.txt
Ici, la commande s signifie remplacer, ancien est le texte que vous recherchez (comme Flameshot dans mon cas), et nouveau est le texte par lequel vous souhaitez le remplacer (comme Gradia).
Par défaut, la commande sed remplace uniquement la première occurrence de chaque ligne. Cependant, dans de nombreux cas, vous devrez remplacer toutes les occurrences du mot cible. Pour ce faire, ajoutez le g à la fin :
fichier sed 's/old/new/g'.txt
Désormais, chaque occurrence dans chaque ligne sera remplacée.
Vous pouvez également remplacer du texte sur une ligne spécifique en spécifiant le numéro de ligne avant l'option s :
sed '10s/ancien/nouveau/' fichier.txt
Cette commande remplace l'ancien texte par le nouveau texte à la ligne 10 uniquement. De même, vous pouvez remplacer du texte sur plusieurs lignes en spécifiant les deux numéros de ligne, séparés par une virgule, avant la balise s :
sed '10,20s/ancien/nouveau/' fichier.txt
En plus des remplacements spécifiques à une ligne, vous pouvez être plus sélectif en indiquant à sed d'agir uniquement si une ligne correspond à un certain modèle :
sed '/ERROR/s/old/new/g' fichier.txt
De cette façon, la commande sed remplace uniquement le texte sur les lignes qui correspondent au modèle (comme error dans ce cas) tout en laissant le reste inchangé.
2. Insérer, ajouter et supprimer du contenu
Lorsque je travaille avec des fichiers, j'effectue souvent trois tâches : insérer, ajouter et supprimer du contenu. Grâce à la commande sed, je peux gérer ces trois tâches de manière fluide et efficace sans avoir à ouvrir le fichier dans un éditeur.
Commençons par l'insertion. La commande sed vous permet d'ajouter du contenu n'importe où dans le fichier, avant ou après une ligne spécifique. Par exemple, si vous travaillez sur un fichier de configuration et souhaitez ajouter un nouveau paramètre avant la troisième ligne, vous pouvez utiliser la balise i :
sed '3i\
# Nouveau paramètre\
ENABLE_FEATURE=true' config.conf
De même, si vous souhaitez que le texte apparaisse après la ligne 10, remplacez simplement i par a :
sed '3a\
Texte ajouté' file.txt
La façon la plus simple de s’en souvenir est de penser à « i » comme « insérer » avant et à « a » comme « ajouter » après.
Il est parfois plus simple de remplacer une ligne entière plutôt que d'en modifier des parties. Par conséquent, utilisez l'option c. Par exemple, si vous disposez d'un fichier de propriétés avec un numéro de version et que vous souhaitez le mettre à jour, vous pouvez remplacer la ligne entière :
sed '/^version=/c\version=2.0.0' config.conf
Cette commande supprime l'ancienne ligne et écrit la nouvelle ligne à sa place.
Si vous souhaitez supprimer une ligne entière sans rien ajouter de nouveau, utilisez l'option d :
fichier sed '3d'.txt
Cela supprime la ligne 3. De plus, vous pouvez également couper un bloc de lignes en spécifiant une plage comme ceci :
fichier sed '5,10d'.txt
Cela supprime les lignes 5 à 10.
Comme mentionné précédemment, lorsque nous avons utilisé la correspondance de motifs pour rechercher et remplacer du contenu, nous pouvons également utiliser sed pour supprimer des données en fonction de ces motifs. Par exemple, si un fichier journal contient des milliers d'entrées DEBUG, vous pouvez toutes les supprimer simultanément :
sed '/DEBUG/d' fichier journal.txt
Ces commandes peuvent sembler intimidantes au début, mais une fois que vous aurez commencé à les utiliser, vous serez en mesure d'effectuer rapidement ces opérations de base en quelques frappes de touches.
3. Afficher et extraire le contenu
Par défaut, la commande sed affiche chaque ligne traitée, ce qui peut être fastidieux, notamment avec les journaux ou les fichiers de configuration. Pour contrôler cela, nous utilisons l'option -n, qui force sed à rester silencieux, sauf demande explicite d'affichage. En associant cette option à la commande p (impression), nous contrôlons totalement l'affichage.
Par exemple, pour imprimer la cinquième ligne d’un fichier spécifié, utilisez :
sed -n fichier '5p'.txt

sed -n fichier '15,20p'.txt
De même, si vous recherchez un mot ou un modèle spécifique, comme des erreurs enfouies dans des milliers de lignes, utilisez ceci :
sed -n '/ERROR/p' fichier.txt
Ici, la commande sed recherche toute ligne contenant le mot ERROR et affiche uniquement ces lignes. Cette méthode est similaire à l'exécution de grep, mais directement dans la commande sed, ce qui est utile pour lier plusieurs processus.
Une autre utilisation efficace consiste à extraire des fragments de texte entre deux balises. Imaginez que vous déboguez le registre système et que vous ne souhaitez extraire que le fragment compris entre START et END :
sed -n '/START/,/END/p' fichier.txt
Ce discriminateur intelligent extrait tout ce qui se trouve entre les mots-clés. Pour inverser la correspondance, utilisez simplement l'option ! comme suit :
sed -n '/ERROR/!p' fichier journal.txt
Cela imprime toutes les lignes sauf celles contenant une erreur, vous permettant de vous concentrer sur le résultat final et d'ignorer le bruit.
4. Modifier les fichiers sur place à l'aide des options de sauvegarde
La commande sed est entièrement sécurisée : elle affiche uniquement les résultats dans le terminal, laissant vos fichiers d'origine intacts. Cependant, vous pourriez souhaiter apporter des modifications permanentes ultérieurement. L'option -i vous permet de modifier le fichier directement :
sed -i 's/old/new/g' fichier.txt
Cette option remplace chaque ancienne version par une nouvelle directement dans votre fichier texte. Pas de redirection, pas de fichiers supplémentaires, juste une mise à jour instantanée. Mais voici le hic : le fichier est immédiatement remplacé, sans bouton d'annulation.
Pour créer une sauvegarde du fichier d'origine, utilisez -i avec le suffixe de sauvegarde :
sed -i.bak 's/old/new/g' fichier.txt
Désormais, sed crée une copie du fichier original sous le nom file.txt.bak avant toute modification. En cas d'erreur, vous pouvez rapidement l'annuler. Vous pouvez également choisir des extensions personnalisées :
sed -i.backup 's/temporary/permanent/g' fichier.txt
sed -i.$(date +%Y%m%d) 's/foo/bar/g' config.conf
La première commande crée un fichier .txt.backup, tandis que la seconde crée une sauvegarde datée, une astuce que j'utilise lors de la répétition des configurations, me permettant de garder une trace de la version et de la date.
5. Appliquer plusieurs modifications à la fois
Parfois, une seule modification ne suffit pas. Vous pouvez nettoyer un jeu de données, unifier des étiquettes ou modifier un fichier de configuration nécessitant plusieurs modifications. Exécuter la commande sed plusieurs fois est utile, mais inefficace. Vous pouvez plutôt regrouper les modifications afin que le fichier ne soit analysé qu'une seule fois.
Par exemple, pour effectuer deux substitutions en un seul passage, utilisez plusieurs balises e :
sed -i -e 's/pomme/orange/g' -e 's/poire/raisin/g' fichier.txt
Ici, la pomme devient une orange et la poire un raisin. Pour un style plus compact, vous pouvez regrouper les commandes dans une seule chaîne, séparées par un point-virgule :
sed's/rouge/bleu/g; s/pomme/orange/g; /draft/d'data.txt
Cette version remplace les couleurs, modifie les noms des fruits et supprime toutes les lignes contenant des brouillons. Son fonctionnement est identique, mais à mesure que les modifications s'accumulent, la lisibilité se dégrade. C'est là qu'intervient le déplacement des commandes vers un fichier texte personnalisé.
6. Automatiser les modifications à l'aide de scripts
Si vous effectuez des tâches de nettoyage récurrentes, par exemple un projet contenant des centaines de fichiers contenant des erreurs de formatage simples comme des caractères supplémentaires, une terminologie incohérente ou des commentaires aléatoires, l'automatisation est indispensable. Au lieu de coller des lignes dans votre terminal, enregistrez vos modifications dans un fichier texte et appliquez-les au texte souhaité.
Par exemple, créez un fichier edits.sed avec ces lignes :
s/pomme/orange/g
s/poire/raisin/g
/^#/d
Vous pouvez désormais tout exécuter en même temps avec :
sed -i -f edits.sed fichier.txt
À l'aide d'une seule commande, la commande sed applique simultanément toutes vos modifications au fichier sélectionné. Cependant, vous devrez consacrer du temps à la création de règles edits.sed pour les fichiers à modifier.
7. Édition de texte à l'aide d'expressions régulières (Regex)
Les expressions régulières décrivent des modèles plutôt que du texte littéral. Cela signifie que vous pouvez cibler des formes de données, comme un mot suivi d'un nombre ou n'importe quel texte en fin de ligne, plutôt que de simples mots. À première vue, les expressions régulières peuvent paraître intimidantes, mais une fois quelques notions de base maîtrisées, vous aurez l'impression de maîtriser un véritable couteau suisse pour manipuler du texte.
Les expressions régulières ne sont pas seulement des outils d'affinement de texte ; elles permettent également d'identifier des tendances et de façonner votre façon de travailler avec les données. Voici quelques symboles clés :
^ et $ correspondent au texte au début ou à la fin d'une ligne.
Les crochets comme [0-9] correspondent à n'importe quel nombre, et [aeiouAEIOU] vous aident à trouver ou à supprimer des voyelles.
Point. Indique n'importe quelle lettre unique.
* et + vous permettent de répéter les motifs autant de fois que vous le souhaitez.
Les expressions régulières peuvent être un peu complexes, mais même l'apprentissage de certaines bases ouvre de vastes possibilités avec des outils comme sed.
Prenez cette commande, qui inverse les noms et prénoms :
sed -E 's/^([A-Za-z]+)[[:space:]]+([A-Za-z]+)$/\2, \1/' noms.txt
Si votre fichier ressemble à ceci :
Jean Dupont
Jane Smith
Alors le résultat sera comme ceci :
Doe, John
Smith, Jane
Regex résout également les problèmes de cohérence, tels que le remplissage des nombres impairs avec des zéros ou la suppression des espaces de fin des enregistrements et des fichiers CSV :
sed -E 's/\b([0-9])\b/0\1/g' numbers.txt #ajouter un zéro non significatif
sed -E 's/[[:space:]]+$//' file.txt #suppression des espaces de fin
8. Nettoyage et formatage des fichiers texte
Des fichiers indésirables apparaissent souvent, notamment lorsqu'ils proviennent de Windows, d'Excel ou d'exportations générées automatiquement. Sed nettoie rapidement ces données, facilitant ainsi leur lecture, leur partage ou leur insertion dans des scripts.
Un exemple courant est celui des fins de ligne Windows. Si vous ouvrez un fichier Windows sous Linux et que vous voyez des caractères ^M étranges, il s'agit d'un retour chariot (\r). Vous pouvez supprimer le retour chariot supplémentaire à la fin de chaque ligne comme suit :
sed -i 's/\r$//' fichier.txt
Les tabulations sont un autre problème courant. Pour regrouper toutes les informations dans des espaces, vous pouvez utiliser les méthodes suivantes :
sed -E 's/\t/ /g' fichier.txt
De plus, les espaces blancs s'infiltrent partout : lignes vides, retours arrière ou espacement des mots incohérent. sed gère cela facilement avec ces commandes :
sed -E '/^[[:space:]]*$/d' fichier.txt
sed -E 's/[[:space:]]+$//' fichier.txt
sed -E 's/[[:space:]]+/ /g' fichier.txt
Ici, la première commande nettoie les lignes vides, la seconde supprime les espaces vides sur les bords et la dernière compresse plusieurs espaces en espaces uniques pour un texte net et uniforme.
9. Combinaison avec d'autres commandes
L'un des aspects que j'apprécie chez sed est sa capacité à fonctionner en parfaite harmonie avec les autres commandes Bash. Il permet de réduire la sortie, d'extraire des informations, de comparer les fichiers traités et d'étendre l'édition à plusieurs fichiers, le tout à partir d'une seule ligne rapide ou au sein de scripts plus volumineux.
Par exemple, ps aux affiche généralement plus de lignes que nécessaire. Mais le lier à sed ne conserve que les cinq premières lignes :
ps aux | sed -n '1,5p'

fichier journal grep 'ERREUR' | sed -E 's/.*\[([0-9-: ]+)\].*/\1/p'
Ce ne sont là que quelques exemples. Vous pouvez combiner sed avec diff, find, xargs et bien d'autres. Cela permet de remodeler des chaînes complexes, améliorant ainsi les performances de la commande suivante.
Des simples opérations de recherche et remplacement aux conversions complexes basées sur des expressions régulières, sed offre des solutions qui vous font gagner d'innombrables heures de travail manuel. Cependant, comme pour toute commande Linux, la clé de la maîtrise réside dans la pratique quotidienne. Utilisez-le souvent et cela deviendra vite facile.
Sous Linux, la commande sed vous offre une puissance considérable pour manipuler du texte et des fichiers plus rapidement et plus efficacement. Au lieu de recourir à des outils d'édition manuelle ou graphiques, vous pouvez effectuer des modifications complexes avec une seule ligne de commande. En approfondissant les exemples de sed, vous découvrirez sa flexibilité et sa capacité à économiser du temps et des efforts, ce qui en fait un outil indispensable pour tout utilisateur ou développeur Linux.








