Fonctionnement de l'éditeur de flux sed
L'utilitaire sed (Stream Editor) est un outil puissant de traietment de texte qui opère ligne par ligne. Son cycle de fonctionnement repose sur un espace mémoire temporaire appelé "Pattern Space". Pour chaque ligne lue en entrée, sed l'enregistre dans cet espace, applique les commandes spécifiées, puis envoie le résultat vers la sortie stendard avant de passer à la ligne suivante. Par défaut, le fichier source reste inchangé, à moins qu'une redirection ou une option spécifique ne soit utilisée.
Syntaxe et options principales
La structure de base d'une commande sed est la suivante :
sed [options] 'action' fichier
Voici les options les plus fréquemment utilisées :
-n: Mode silencieux. Désactive l'affichage automatique du flux d'entrée. Seules les lignes explicitement ciblées (souvent avec la commandep) seront affichées.-e: Permet d'enchaîner plusieurs scripts ou actions d'édition dans une même commande.-i: Modifie directement le fichier d'origine au lieu d'afficher le résultat à l'écran.-r: Active le support des expressions régulières étendues.
Les actions courantes se définissent par une plage de lignes (optionnelle) suivie d'une fonction :
a: Ajoute du texte après la ligne spécifiée.i: Insère du texte avant la ligne spécifiée.d: Supprime les lignes sélectionnées.p: Affiche le contenu (souvent couplé à-n).s: Substitue une chaîne de caractères par une autre via une expression régulière.c: Remplace une ou plusieurs lignes par un nouveau contenu.
Manipulation de lignes : Ajout et Suppression
Pour illustrer la suppression, supposons un fichier nommé serveur.log. Pour supprimer les lignes 2 à 4 lors de l'affichage :
cat -n serveur.log | sed '2,4d'
Pour supprimer uniquement la dernière ligne du flux :
sed '$d' serveur.log
L'ajout de contenu s'effectue avec a (après) ou i (avant). Par exemple, pour insérer un commentaire après la ligne 1 :
sed '1a # Début du bloc de configuration' config.sys
Pour ajouter plusieurs lignes d'un coup, on utilise le caractère de continuation \ :
sed '2a Ligne supplémentaire 1 \
Ligne supplémentaire 2' fichier.txt
Remplacement de contenu (Substitution)
La commande s est l'une des plus utilisées pour transformer des données précises. Sa syntaxe est s/ancien/nouveau/g, où g signifie un remplacement global sur la ligne.
Si nous voulons modifier une adresse IP dans un fichier de configuration :
sed 's/192.168.0.1/10.0.0.5/g' network.conf
Il est possible de cibler une recherche spécifique avant d'appliquer une transformation. Pour chercher les lignes contenant "ERROR" et remplacer "timeout" par "fatal" :
sed -n '/ERROR/{s/timeout/fatal/;p}' application.log
Extraction et filtrage de données
Grâce à l'option -n et la fonction p, sed peut agir comme un filtre pour extraire des segments spécifiques d'un fichier.
Pour extraire uniquement les lignes 10 à 15 d'un document :
sed -n '10,15p' document.txt
Pour afficher toutes les lignes contenant le mot "admin" dans le fichier des utilisateurs :
sed -n '/admin/p' /etc/passwd
Édition multiple et modification de fichiers
L'option -e permet d'appliquer plusieurs transformations en une seule passe. Par exemple, supprimer la première ligne et remplacer "test" par "prod" :
sed -e '1d' -e 's/test/prod/g' environnement.env
Pour appliquer les changements de manière permanente dans le fichier, l'option -i est indispensable. Elle est particulièrement utile pour les traitements automatisés sur des fichiers volumineux :
# Remplace tous les points en fin de ligne par des points d'exclamation
sed -i 's/\.$/\!/g' rapport.txt
# Ajoute une signature à la fin du fichier
sed -i '$a # Fin du rapport automatique' rapport.txt