Différences entre les versions de « La commande sed »

m (enlever la commande qui était dans l'intro)
 
(30 versions intermédiaires par un autre utilisateur non affichées)
Ligne 1 : Ligne 1 :
 
[[Catégorie:Commandes]]
 
[[Catégorie:Commandes]]
<pre>
+
<!-- Rechercher, rechercher, Remplacer, remplacer, Couper, couper, Find, find, Replace, replace, Cut, cut -->
sed [options] 'fonctions' <fichier-entrée>
+
La [[Commandes_élémentaires|commande]] '''<tt>sed</tt>''' (''Stream EDitor'') est utilisée pour transformer le contenu d'un flux d'entrée, comme par exemple les caractères d'un fichier texte affiché à l'écran. Notons que cette commande est compatible avec les [[Regexp|expressions régulières]].
</pre>
 
La [[Commandes_élémentaires|commande]] '''<tt>sed</tt>''' (''Stream EDitor'') est utilisée pour transformer le texte d'un flux d'entrée, comme par exemple un fichier affiché à l'écran. Notamment, les fonctionnalités de substitutions de chaînes de caractères permettent de rechercher du texte dans des fichiers te de remplacer les occurences par une autre expression. Notons que cette commande est compatible avec les [[Regexp|expressions régulières]].
 
  
 
Pour une liste exhaustive des options et des fonctionnalités, consultez le manuel de la commande ([[Commandes_élémentaires#man|<tt>man</tt>]] <tt>sed</tt>).
 
Pour une liste exhaustive des options et des fonctionnalités, consultez le manuel de la commande ([[Commandes_élémentaires#man|<tt>man</tt>]] <tt>sed</tt>).
Ligne 15 : Ligne 13 :
 
sed [options] 'fonctions' <fichier-entrée>
 
sed [options] 'fonctions' <fichier-entrée>
 
</pre>
 
</pre>
La commande peut exécuter plusieurs fonctions à la fois, fonctions qu'il convient de séparer par un &laquo;&nbsp;<tt>;</tt>&nbsp;&raquo; (voir la section [[La_commande_sed#Exemples|Exemples]].
+
La commande peut exécuter plusieurs <tt>fonctions</tt> à la fois, fonctions séparées par un &laquo;&nbsp;<tt>;</tt>&nbsp;&raquo;. À la section [[La_commande_sed#Exemples|Exemples]], les fonctions <tt>d</tt> (effacer), <tt>s</tt> (chercher) et <tt>y</tt> (échanger) sont présentées.
  
 
La commande <tt>sed</tt> fonctionne comme suit&nbsp;:
 
La commande <tt>sed</tt> fonctionne comme suit&nbsp;:
  
 
* lecture d'une ligne sur le flux d'entrée;
 
* lecture d'une ligne sur le flux d'entrée;
* traitement de la ligne selon les fonctions demandées&nbsp;:
+
* traitement de la ligne selon les fonctions demandées;
 
* passage à la ligne suivante.
 
* passage à la ligne suivante.
  
La sortie de la commande est, par défaut, affichée à l'écran mais celle-ci pour être [[Pipelining_et_redirection#Redirection|redirigée]], dans un fichier par exemple.
+
La sortie de la commande est, par défaut, affichée à l'écran mais celle-ci peut être [[Pipelining_et_redirection#Redirection|redirigée]], dans un fichier par exemple.
  
La commande <tt>sed</tt> s'exécute à partir du terminal avec l'option <tt>-e</tt>&nbsp;:
+
Avec l'option <tt>-f</tt>, la commande exécute les fonctions contenues dans un fichier script&nbsp;:
 
<pre>
 
<pre>
sed -e 'fonction sed' [fichier.txt]
+
sed -f <fichier_script> [options] 'fonctions' <fichier-entrée>
 
</pre>
 
</pre>
 
 
# On peut passer à sed un script (fichier externe) contenant les commandes pour le traitement (myScriptFile), avec l'option sed '''-f''' myScriptFile. <pre>sed -f fichier_script [fichier.txt]</pre>
 
* 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 avec [[Pipelining_et_redirection#Redirection|le symbole '''>'''  ]](On garde intact le fichier en entrée). <pre>sed -e 'fonction sed' [fichier.txt] > fichierTraite.txt </pre>
 
# 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'''; <pre>sed -i 'fonction sed' [fichier.txt]</pre>
 
* passage à la ligne suivante.
 
  
 
== Exemples ==
 
== Exemples ==
Ligne 41 : Ligne 32 :
 
=== Suppression ===
 
=== Suppression ===
  
 +
* Avec la commande
 +
<pre>
 +
sed '4d; 7d' test.txt
 +
</pre>
 +
les lignes 4 et 7 du fichier <tt>test.txt</tt> sont effacées et le résultat est affiché à l'écran. Pour [[Pipelining_et_redirection#Redirection|rediriger]] la sortie vers un fichier, <tt>test2.txt</tt> par exemple, il suffit d'entrer
 +
<pre>
 +
sed '4d; 7d' test.txt > test2.txt
 +
</pre>
 +
 +
* L'effacement de lignes contenant un certain motif ([[Regexp|expression régulière]]) est possible. Le motif à rechercher doit être balisé par 2 symboles &laquo;&nbsp;/&nbsp;&raquo;. Par exemple,
 
<pre>
 
<pre>
sed -e '4d; 7d' test.txt
+
sed '/^#/d' test.txt
 
</pre>
 
</pre>
efface les lignes 4 et 7 (option d pour delete) du texte du fichier test.txt et affiche le résultat à l'écran.
+
supprime toutes les lignes débutant par un dièse (<tt>^</tt> signifie &laquo;&nbsp;début de ligne&nbsp;&raquo;).
<br/>
 
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'''/'''
 
  
<pre> sed '/^#/ d' test.txt </pre>
+
* La commande <tt>sed</tt> peut également effacer une plage de texte comprise entre deux motifs&nbsp;:
supprime toutes les lignes commençant par une dièse (^ signifie début de ligne) pour l'affichage.
 
<br/>
 
On peut définir une plage de texte comprise entre le motif 1 et le motif 2 avec : /motif1/''','''/motif2/
 
 
<pre>
 
<pre>
sed '/^Bonjour/,/^Au revoir/d' test.txt  
+
sed '/Bonjour/,/Au revoir/d' test.txt  
 
</pre>
 
</pre>
supprime toutes les lignes comprises entre 'Bonjour' et 'Au revoir' du texte du fichier test.txt et affiche le résultat à l'écran.
+
supprime toutes les lignes comprises entre &laquo;&nbsp;<tt>Bonjour</tt>&nbsp;&raquo; et &laquo;&nbsp;<tt>Au revoir</tt>&nbsp;&raquo; (inclusivement).
<br/>
 
  
 
=== Chercher et remplacer ===
 
=== 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.
+
La fonction <tt>s</tt> de la commande <tt>sed</tt> offre la possibilité de rechercher un motif et de le remplacer par un autre&nbsp;:
<br/>
 
Syntaxe : s/motifRecherché/substitut/<br/>
 
La substitution va se faire sur la première occurrence du motif.<br/><br/>
 
Pour que le remplacement se fasse sur tout le texte, il faut ajouter l'option '''g''' comme ceci : s/motif/substitut/'''g'''
 
<br/><br/>
 
<pre>sed -e 's/Paris/Montreal/g' fichier.txt</pre>
 
remplace toutes les occurrences de Paris par Montreal dans le texte passé en entrée et affiche le résultat à l'écran. <br/>
 
<br/>Le motif recherché peut être une regex mais le substitut doit rester une chaîne de caractères. <br/>
 
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).
 
<br/>
 
 
<pre>
 
<pre>
sed -re 's/^# *//' nomFichier
+
s/motifRecherché/motifSubstitut/
 
</pre>
 
</pre>
Le motif <pre>/^# */</pre> 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 et afficher le résultat à l'écran.
+
Par défaut, le remplacement de <tt>motifRecherché</tt> par <tt>motifSubstitut</tt> n'a lieu que pour la première occurrence du motif cherché pour la ligne en cours de lecture. Pour que le remplacement soit effectué pour toutes les occurrences de chaque ligne, il faut terminer la fonction par <tt>g</tt> &nbsp;:
<br/>
 
 
<pre>
 
<pre>
sed -re 's/\t/ /g' nomfichier
+
s/motifRecherché/motifSubstitut/g
 
</pre>
 
</pre>
remplace les tabulations par un espace.
+
Dans l'exemple ci-dessous, toutes les occurrences de &laquo;&nbsp;<tt>Paris</tt>&nbsp;&raquo; sont remplacées par &laquo;&nbsp;<tt>Montréal</tt>&nbsp;&raquo; dans <tt>fichier.txt</tt>&nbsp;:
 
 
=== Échange de caractères ===
 
 
 
syntaxe : y/listeCaractères/listeRemplacants/.
 
 
<pre>
 
<pre>
sed -re ''''y'''/éèê/eee/' test.txt
+
sed 's/Paris/Montréal/g' fichier.txt
 
</pre>
 
</pre>
remplace les 'e' accentués par des 'e' sans accents.
 
  
 
== Voir aussi ==
 
== Voir aussi ==
Ligne 93 : Ligne 72 :
 
=== Articles connexes ===
 
=== Articles connexes ===
  
[[Commandes_élémentaires|Commandes élémentaires]]
+
* [[Commandes_élémentaires|Commandes élémentaires]]
 +
* [[Regexp|Expressions régulières]]
 +
 
 +
=== Références externes ===
 +
* http://www.gnu.org/software/sed/manual/sed.html

Version actuelle datée du 15 mai 2020 à 09:57

La commande sed (Stream EDitor) est utilisée pour transformer le contenu d'un flux d'entrée, comme par exemple les caractères d'un fichier texte affiché à l'écran. Notons que cette commande est compatible avec les expressions régulières.

Pour une liste exhaustive des options et des fonctionnalités, consultez le manuel de la commande (man sed).


Description

Voici le synopsis pour sed obtenu à partir de man sed :

sed [options] 'fonctions' <fichier-entrée>

La commande peut exécuter plusieurs fonctions à la fois, fonctions séparées par un « ; ». À la section Exemples, les fonctions d (effacer), s (chercher) et y (échanger) sont présentées.

La commande sed fonctionne comme suit :

  • lecture d'une ligne sur le flux d'entrée;
  • traitement de la ligne selon les fonctions demandées;
  • passage à la ligne suivante.

La sortie de la commande est, par défaut, affichée à l'écran mais celle-ci peut être redirigée, dans un fichier par exemple.

Avec l'option -f, la commande exécute les fonctions contenues dans un fichier script :

sed -f <fichier_script> [options] 'fonctions' <fichier-entrée>

Exemples

Suppression

  • Avec la commande
sed '4d; 7d' test.txt

les lignes 4 et 7 du fichier test.txt sont effacées et le résultat est affiché à l'écran. Pour rediriger la sortie vers un fichier, test2.txt par exemple, il suffit d'entrer

sed '4d; 7d' test.txt > test2.txt
  • L'effacement de lignes contenant un certain motif (expression régulière) est possible. Le motif à rechercher doit être balisé par 2 symboles « / ». Par exemple,
sed '/^#/d' test.txt

supprime toutes les lignes débutant par un dièse (^ signifie « début de ligne »).

  • La commande sed peut également effacer une plage de texte comprise entre deux motifs :
sed '/Bonjour/,/Au revoir/d' test.txt 

supprime toutes les lignes comprises entre « Bonjour » et « Au revoir » (inclusivement).

Chercher et remplacer

La fonction s de la commande sed offre la possibilité de rechercher un motif et de le remplacer par un autre :

s/motifRecherché/motifSubstitut/

Par défaut, le remplacement de motifRecherché par motifSubstitut n'a lieu que pour la première occurrence du motif cherché pour la ligne en cours de lecture. Pour que le remplacement soit effectué pour toutes les occurrences de chaque ligne, il faut terminer la fonction par g  :

s/motifRecherché/motifSubstitut/g

Dans l'exemple ci-dessous, toutes les occurrences de « Paris » sont remplacées par « Montréal » dans fichier.txt :

sed 's/Paris/Montréal/g' fichier.txt

Voir aussi

Articles connexes

Références externes


La dernière modification de cette page a été faite le 15 mai 2020 à 09:57.