Introduction
Le programme sed est un éditeur de texte en ligne. Contrairement aux autres
éditeurs de texte comme ed, ex ou vi qui agissent sur un fichier en le
modifiant directement, sed agit sur un fichier d’entrée pour produire une
version modifiée dans un fichier de sortie distinct, le fichier d’entrée
n’étant jamais modifié. Cette caractéristique est très utile dans les pipes et
dans les scripts shells.
La syntaxe est peu conviviale mais elle permet de réaliser des traitements complexes sur des fichiers.
Utilisation du programme sed et syntaxe
La syntaxe de sed est la suivante :
sed -e "programme sed" fichier-a-traiter
ou
sed -f fichier_programme fichier_a_traiter
L’option -n supprime la sortie standard par défaut, sed écrit uniquement les
lignes concernées par le traitement sed (dans le cas contraire sed renvoie en
sortie toutes les lignes même celles qui n’ont pas subi de traitement par le
programme sed).
L’option -e est optionnelle lorsqu’il n’existe qu’une seule fonction
d’édition.
Pour plus d’informations sur le programme sed, consulter le man du programme
sed.
La commande de substitution s
La commande de substitution s permet de changer la première ou toutes les
occurrences d’une chaine de caractères par une autre. Les changements sont
réalisés dans la sortie standard. Les paramètres de la commande de substitution
s et ses paramètres doivent être placés entre simple quotes pour les protéger
du shell.
La commande s peut accomoder des expressions régulières. Sans l’option g, le
remplacement ne se fait qu’une fois par ligne.
Substitution de la première occurrence chaine1 par CHAINE1 :
sed "s/chaine1/CHAINE1/" fichier
Substitution de la troisième occurrence chaine1 par CHAINE1 :
sed "s/chaine1/CHAINE1/3" fichier
Substitution de toutes les occurrences chaine1 par CHAINE1 :
sed "s/chaine1/CHAINE1/g" fichier
En cas de substitution, la ligne concernée est affichée
sed "s/chaine1/CHAINE1/p" fichier
En cas de substitution, la ligne est écrite dans le fichier resultat :
sed "s/chaine1/CHAINE1/w resultat" fichier
Subsitution de toutes les occurrences Chaine1 ou chaine1 par
CHAINE1 :
sed "s/[Cc]aine1/CHAINE1/g" fichier
Substitution de chaine1 par chaine2 à condition que chaine1 se
présente en début de ligne :
sed "s/^chaine1/chaine2/g" fichier
Pour délimiter les chaines de caractère source et objet, le caractère '/' a
été utilisé, mais il est possible d’utiliser un autre caractère surtout si le
caractère '/' doit être traité par sed :
Exemple :
sed -n "s+chaine1+chaine2/g" fichier
La commande de substitution y
La commande y de subsitution effectue le remplacement de
caractères dans la première chaine par le caractère dans la seconde chaine à la
même position.
Exemple :
sed "y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwsyz/g"
La commande de suppression d
La fonction de suppression d supprime des lignes comprises dans
un intervalle donné.
Exemple :
sed "20,30d" fichier (pour supprimer les lignes 20 à 30 dans le fichier)
Les expressions régulières sont autorisées.
Exemples :
sed "/chaine1/d" fichier
sed "/chaine1/ !d" fichier
Le premier exemple supprime toutes les lignes contenant la chaine chaine1.
Dans le second cas, seules les lignes ne contenant pas la chaine chaine1 sont
supprimées.
Pour rappel, ces lignes ne sont pas supprimées dans le fichier, elles le sont uniquement dans la sortie standard.
Les commandes p, l et =
- La commande
p(print) affiche la ligne sélectionnée sur la sortie standard. Elle invalide l’optionn - La commande
l(list) affiche la ligne sélectionnée sur la sortie standard avec en plus les caractères de contrôle en clair avec leur code ASCII (deux chiffres en octal) - La commande
=donne le numéro de la ligne sélectionnée sur la sortie standard
Ces trois commandes sont très utiles lors des opérations de débug avec les programmes sed.
Exemple :
sed "/chaine1/=" fichier
Les commandes q, r et w
- La commande
q(quit) interrompt le programmesed, la ligne en cours de traitement est affichée sur la sortie standard (sauf si l’optionnest activée). - La commande
r(read) lit le contenu d’un fichier et écrit le contenu dans la sortie standard. - La commande
w(write) écrit la ligne sélectionnée dans un fichier.
Exemple :
sed "/^chaine1/w resultat" fichier
Dans l’exemple ci-dessus, toutes les lignes dans le fichier contenant la
chaine de caractères chaine1 sont écrites dans le fichier resultat.
Les commandes a et i
- La commande
a(append) ajoute un texte après la ligne sélectionnée - La commande
i(insert) insère un texte avant la ligne sélectionnée
La caractère \ permet d’effectuer des retours chariot si le texte à insérer
ou à ajouter se présente sur plusieurs lignes.
Exemples : fichier prog.sed
1i\ Début du traitement du fichier s/[cC]haine1/CHAINE1/g $a \ Fin du traitement\ du fichiersed -f prog.sed <fichier>
- Dans ce programme une ligne est insérée avant la ligne 1 : Début du traitement du fichier
- Toutes les occurrences
chaine1ouChaine1sont remplacées parCHAINE1 - Insertion après la dernière ligne des lignes :