La commande sed

Expressions régulières La commande awk, présentation

Expressions régulières et sed

Présentation

La fonction de substitution s

La fonction de suppression d

Les fonctions p, l et =

Les fonctions q, r et w

Les fonctions a et i

sed et les sous chaînes

Présentation

sed est éditeur ligne non interactif, il lit les lignes d'un fichier une à une (ou provenant de l'entrée standard) leur applique un certain nombre de commandes d'édition et renvoie les lignes résultantes sur la sortie standard. Il ne modifie pas le fichier traité, il écrit tout sur la sortie standard.

sed est une évolution de l'éditeur ed lui même précurseur de vi, la syntaxe n'est franchement pas très conviviale, mais il permet de réaliser des commandes complexes sur des gros fichiers.

La syntaxe de sed est la suivante:

sed -e 'programme sed' fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter

Vous disposez de l'option -n qui supprime la sortie standard par défaut, sed va écrire uniquement les lignes concernées par le traitement (sinon il écrit tout même les lignes non traitées). L'option -e n'est pas nécessaire quand vous avez une seule fonction d'édition.

La commande sed est une commande très riche, ne vous sont présentées ici que les fonctions les plus courantes, pour plus de détails faites un man sed et/ou man ed.

La fonction de substitution s

La fonction de substitution permet de changer la première ou toutes les occurences d'une chaîne par une autre. La syntaxe est la suivante:

commande signification
sed "s/toto/TOTO/" fichier va changer la première occurence de la chaîne toto par TOTO (la première chaîne toto rencontrée dans le texte uniquement)
sed "s/toto/TOTO/3" fichier va changer la troisième occurence de la chaîne toto par TOTO (la troisième chaîne toto rencontrée dans le texte uniquement)
sed "s/toto/TOTO/g" fichier va changer toutes les occurences de la chaîne toto par TOTO (toutes les chaînes toto rencontrées sont changées
sed "s/toto/TOTO/p" fichier en cas de remplacement la ligne concernée est affichée sur la sortie standard (uniquement en cas de substitution)
sed "s/toto/TOTO/w resultat" fichier en cas de substitution la ligne en entrée est inscrite dans un fichier résultat

La fonction de substitution peut évidemment être utilisée avec une expression régulière.

Commande Signification
sed -e "s/[Ff]raise/FRAISE/g" fichier substituer toutes les chaînes Fraise ou fraise par FRAISE

La fonction de suppression d

La fonction de suppression d supprime les lignes comprises dans un intervalle donné. La syntaxe est la suivante:

sed "20,30d" fichier

Cette commande va supprimer les lignes 20 à 30 du fichier fichier. On peut utiliser les expressions régulières:

sed "/toto/d" fichier

Cette commande supprime les lignes contenant la chaîne toto. Si au contraire on ne veut pas effacer les lignes contenant la chaîne toto (toutes les autres sont supprimées), on tapera:

sed "/toto/!d" fichier

En fait les lignes du fichier d'entrée ne sont pas supprimées, elles le sont au niveau de la sortie standard.

Les fonctions p, l, et =

La commande p (print) affiche la ligne sélectionnée sur la sortie standard. Elle invalide l'option -n.

La commande l (list) affiche la ligne sélectionnée sur la sortie standard avec en plus les caractères de contrôles 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 utiles pour le débogage, quand vous mettez au point vos programmes sed.

sed "/toto/=" fichier

Cette commande va afficher le numéro de la ligne contenant la chaîne toto.

Les fonctions q, r et w

La fonction q (quit) va interrompre l'exécution de sed, la ligne en cours de traitement est affichée sur la sortie standard (uniquement si -n n'a pas été utilisée).

La fonction r (read) lit le contenu d'un fichier et écrit le contenu sur la sortie standard.

La fonction w (write) écrit la ligne sélectionnée dans un fichier.

sed "/^toto/w resultat" fichier

Cette commande va écrire dans le fichier resultat toutes les lignes du fichier fichier commençant par la chaîne toto.

Les fonctions a et i

La fonction a (append) va placer un texte après la ligne sélectionnée. La syntaxe est la suivante:

a\
le texte

La fonction i (insert) va placer un texte avant la ligne sélectionnée. La syntaxe est la suivante:

i\
le texte

Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante:

ligne 1 du texte\
ligne 2 du texte\
ligne n du texte\
dernière ligne

Concrètement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed. Par exemple, soit votre fichier prog.sed suivant:

1i\  
début du traitement  
s/[tT]oto/TOTO/g  
$a\  
fin du traitement\  
de notre fichier  

On exécute la commande en tapant: sed -f prog.sed fichier-a-traiter

prog.sed a pour effet d'inscrire avant la première ligne (1i) le texte "début de traitement", et après la dernière ligne ($a) le texte "fin du traitement (retour à la ligne) de notre fichier".

sed et les sous chaînes

La commande:

sed -e "s/\([0-9][0-9]*\)/aa\1aa/" fichier

La sous expression (sous chaîne) \([0-9][0-9]*\) désigne un ou plusieurs chiffres, chacun sera entouré des caractères aa. La chaîne to2to deviendra toaa2aato.

Retour haut de la page