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

m (enlever la commande qui était dans l'intro)
 
(79 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
 
[[Catégorie:Commandes]]
 
[[Catégorie:Commandes]]
 +
<!-- Rechercher, rechercher, Remplacer, remplacer, Couper, couper, Find, find, Replace, replace, Cut, cut -->
 +
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]].
 +
 +
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>).
 +
 +
 +
__TOC__
 +
 
== Description ==
 
== Description ==
Le mot sed signifie "éditeur de flux" (Stream EDitor).
+
Voici le synopsis pour <tt>sed</tt> obtenu à partir de [[Commandes_élémentaires#man|<tt>man</tt>]] <tt>sed</tt>&nbsp;:
 +
<pre>
 +
sed [options] 'fonctions' <fichier-entrée>
 +
</pre>
 +
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.
  
== Guide ==
+
La commande <tt>sed</tt> fonctionne comme suit&nbsp;:
La commande sed fonctionne analyse le flux en entrée (fichier ou autre) ligne par ligne.
 
  
Il existe deux façons d'utiliser sed :
+
* lecture d'une ligne sur le flux d'entrée;
 +
* traitement de la ligne selon les fonctions demandées;
 +
* passage à la ligne suivante.
  
* 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 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 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
+
Avec l'option <tt>-f</tt>, la commande exécute les fonctions contenues dans un fichier script&nbsp;:
 
<pre>
 
<pre>
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
+
sed -f <fichier_script> [options] 'fonctions' <fichier-entrée>
 
</pre>
 
</pre>
  
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.
+
== Exemples ==
  
Il existe là encore deux manières de passer un script à sed :
+
=== Suppression ===
  
* 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.
+
* Avec la commande
* On peut passer à sed un fichier externe contenant le script (myScriptFile), avec sed '''-f''' myScriptFile.
+
<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>
  
== Exemples ==
+
* 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 inclus dans fichier test.txt et affiche à l'écran le résultat (ne modifie pas test.txt).
+
supprime toutes les lignes débutant par un dièse (<tt>^</tt> signifie &laquo;&nbsp;début de ligne&nbsp;&raquo;).
  
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'''/'''
+
* La commande <tt>sed</tt> peut également effacer une plage de texte comprise entre deux motifs&nbsp;:
 +
<pre>
 +
sed '/Bonjour/,/Au revoir/d' test.txt
 +
</pre>
 +
supprime toutes les lignes comprises entre &laquo;&nbsp;<tt>Bonjour</tt>&nbsp;&raquo; et &laquo;&nbsp;<tt>Au revoir</tt>&nbsp;&raquo; (inclusivement).
  
<pre> sed '/^#/ d' test.txt </pre>
+
=== Chercher et remplacer ===
* 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 par un interval avec : /motif1/''','''/motif2/
+
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;:
 +
<pre>
 +
s/motifRecherché/motifSubstitut/
 +
</pre>
 +
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;:
 +
<pre>
 +
s/motifRecherché/motifSubstitut/g
 +
</pre>
 +
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;:
 
<pre>
 
<pre>
sed '/^Bonjour/,/^Au revoir/d' test.txt  
+
sed 's/Paris/Montréal/g' fichier.txt
 
</pre>
 
</pre>
* supprime toutes les lignes comprises entre 'Bonjour' et 'Au revoir' du texte inclus dans fichier test.txt et affiche le résultat à l'écran.
 
  
Dans le cas d'adressage par intervalle entre deux motifs, sed va répéter les commandes passées pour cet intervalle à chaque fois que l'intervalle est trouvé.
+
== Voir aussi ==
  
Si seul /motif1/ est présent, sed va appliquer le script sur tout ce qu'il trouvera après jusqu'à la fin du flux d'entrée.
+
=== Articles connexes ===
  
== Voir aussi ==
+
* [[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 à 10: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 à 10:57.