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’optionn
est 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 fichier
sed -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
chaine1
ouChaine1
sont remplacées parCHAINE1
- Insertion après la dernière ligne des lignes :