Différences entre versions de « La commande sed »

Ligne 2 : Ligne 2 :
 
== Description ==
 
== Description ==
 
Le mot sed signifie "éditeur de flux" (Stream EDitor).
 
Le mot sed signifie "éditeur de flux" (Stream EDitor).
L'éditeur de flux Sed lit les lignes d'un ou plusieurs fichiers depuis l'entrée standard, exécute des commandes lues elles aussi depuis l'entrée standard sous forme d'expressions (commandes d'édition) ou depuis un fichier texte (script), et écrit le résultat du traitement sur la sortie standard.  
+
L'éditeur de flux Sed lit les lignes d'un ou plusieurs fichiers depuis l'entrée standard, exécute des commandes lues elles aussi depuis l'entrée standard sous forme d'expressions (commandes d'édition) ou depuis un fichier texte (script), et retourne le résultat du traitement sur la sortie standard ou autres.  
 
<br/>
 
<br/>
On pourrait résumer le mécanisme de fonctionnement de sed de cette façon :
 
 
* lecture d'une ligne sur le flux d'entrée (une ligne étant délimitée par un caractère de saut de ligne);
 
* traitement de la ligne en fonctions des diverses commandes lues;
 
* Résultat du traitement, différentes options s'offrent:
 
-> modification du fichier en entrée; <br/>
 
-> affichage sur la sortie standard (écran) ou redirection vers un nouveau fichier sans modification du flux en entrée.<br/>
 
* passage à la ligne suivante.
 
  
 
== Guide ==
 
== Guide ==
La commande sed fonctionne analyse le flux en entrée (fichier ou autre) ligne par ligne.
 
 
Il existe deux façons d'utiliser sed :
 
 
* La première consiste à appliquer la commande sur le flux d'entrée, et à récupérer le flux de sortie. Par exemple, on applique sed sur un fichier, et on redirige la sortie sur un autre fichier;
 
* La deuxième, avec l'option sed '''-i''', applique la commande directement sur le fichier passé en entrée.
 
  
 
Voici le synopsis de la commande obtenu à partir de la commande '''man''' sed
 
Voici le synopsis de la commande obtenu à partir de la commande '''man''' sed
Ligne 25 : Ligne 11 :
 
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
 
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
 
</pre>
 
</pre>
 +
On pourrait résumer le mécanisme de fonctionnement de sed de cette façon :
  
En plus des options et du flux d'entrée, sed reçoit un script. Ce script contiendra toutes les actions à exécuter sur le flux d'entrée.
+
* lecture d'une ligne sur le flux d'entrée (une ligne étant délimitée par un caractère de saut de ligne);
 +
* traitement de la ligne en fonctions des diverses commandes lues:
 +
-> On peut écrire les commandes directement dans la ligne de commande, avec l'option sed '''-e'''. On séparera les commandes par des point-virgules;
 +
-> On peut passer à sed un script (fichier externe) contenant les commandes pour le traitement (myScriptFile), avec l'option sed '''-f''' myScriptFile.
 +
* redirection du résultat, différentes options s'offrent:
 +
-> On peut afficher le résultat sur la sortie standard (écran) ou le rediriger vers un nouveau fichier (On garde intact le fichier en entrée).<br/>
 +
-> On peut afficher directement le résultat dans le fichier passé en entrée, on modifie alors le fichier en entrée avec l'option sed '''-i'''; <br/>
 +
* passage à la ligne suivante.
  
Il existe là encore deux manières de passer un script à sed :
 
  
* On peut écrire le script directement dans la ligne de commande, avec l'option sed '''-e'''. On séparera les commandes avec des point-virgules.
 
* On peut passer à sed un fichier externe contenant le script (myScriptFile), avec sed '''-f''' myScriptFile.
 
  
 
== Exemples ==
 
== Exemples ==

Version du 15 décembre 2010 à 09:38

Description

Le mot sed signifie "éditeur de flux" (Stream EDitor). L'éditeur de flux Sed lit les lignes d'un ou plusieurs fichiers depuis l'entrée standard, exécute des commandes lues elles aussi depuis l'entrée standard sous forme d'expressions (commandes d'édition) ou depuis un fichier texte (script), et retourne le résultat du traitement sur la sortie standard ou autres.

Guide

Voici le synopsis de la commande obtenu à partir de la commande man sed

sed [OPTION]... {script-only-if-no-other-script} [input-file]...

On pourrait résumer le mécanisme de fonctionnement de sed de cette façon :

  • lecture d'une ligne sur le flux d'entrée (une ligne étant délimitée par un caractère de saut de ligne);
  • traitement de la ligne en fonctions des diverses commandes lues:

-> On peut écrire les commandes directement dans la ligne de commande, avec l'option sed -e. On séparera les commandes par des point-virgules; -> On peut passer à sed un script (fichier externe) contenant les commandes pour le traitement (myScriptFile), avec l'option sed -f myScriptFile.

  • redirection du résultat, différentes options s'offrent:

-> On peut afficher le résultat sur la sortie standard (écran) ou le rediriger vers un nouveau fichier (On garde intact le fichier en entrée).
-> On peut afficher directement le résultat dans le fichier passé en entrée, on modifie alors le fichier en entrée avec l'option sed -i;

  • passage à la ligne suivante.


Exemples

suppression

sed -e '4d; 7d' test.txt

efface les lignes 4 et 7 (option d pour delete) du texte du fichier test.txt et affiche à l'écran le résultat (ne modifie pas test.txt).
On peut aussi utiliser des expressions régulières (regex) pour appliquer la commande sur toutes les lignes où le motif est trouvé. On décrit un motif comme ceci : /motif/

 sed '/^#/ d' test.txt 

supprime toutes les lignes commençant par une dièse (^ signifie début de ligne) pour l'affichage.
On peut définir une plage de texte comprise entre le motif 1 et le motif 2 avec : /motif1/,/motif2/

sed '/^Bonjour/,/^Au revoir/d' test.txt 

supprime toutes les lignes comprises entre 'Bonjour' et 'Au revoir' du texte du fichier test.txt et affiche le résultat à l'écran.

Chercher et remplacer

La commande sed permet de rechercher et remplacer du texte à partir d'expressions régulières ou de chaîne de caractères.
Syntaxe : s/motifRecherché/substitut/
La substitution va se faire sur la première occurrence du motif.
Pour que le remplacement se fasse sur tout le texte, il faut ajouter l'option g comme ceci : s/motif/substitut/g
Le motif recherché peut être une regex mais le substitut doit rester une chaîne de caractères.
NB : le substitut accepte quand même le métacaractère &, ainsi que les références arrières telles que \1 (de 1 à 9).

sed -re 's/^# *//' nomFichier

Le motif

/^# */

correspond aux lignes commentées (aux lignes commençant par #) suivies d'un ou plusieurs espaces (* est un métacaractère signifiant 0 ou plus). Le substitut est vide. Cette commande va donc décommenter et supprimer les espaces au début des lignes commentées du contenu de nomFichier pour un affichage à l'écran.


sed -re 's/\t/ /g' nomfichier 

remplace les tabulations par un espace.

Échange de caractères

syntaxe : y/listeCaractères/listeRemplacants/.

sed -re ''''y'''/àâ/aa/' test.txt

remplace les 'a' accentués par des 'a' sans accents.


Voir aussi


La dernière modification de cette page a été faite le 15 décembre 2010 à 09:38.