Différences entre les versions de « La commande sed »
m (enlever la commande qui était dans l'intro) |
|||
(7 versions intermédiaires par un autre utilisateur 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]]. | 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]]. | ||
Ligne 15 : | Ligne 13 : | ||
sed [options] 'fonctions' <fichier-entrée> | sed [options] 'fonctions' <fichier-entrée> | ||
</pre> | </pre> | ||
− | La commande peut exécuter plusieurs <tt>fonctions</tt> à la fois, fonctions | + | La commande peut exécuter plusieurs <tt>fonctions</tt> à la fois, fonctions séparées par un « <tt>;</tt> ». À 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 : | La commande <tt>sed</tt> fonctionne comme suit : | ||
Ligne 25 : | Ligne 23 : | ||
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 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. | ||
− | Avec l'option <tt>- | + | Avec l'option <tt>-f</tt>, la commande exécute les fonctions contenues dans un fichier script : |
<pre> | <pre> | ||
sed -f <fichier_script> [options] 'fonctions' <fichier-entrée> | sed -f <fichier_script> [options] 'fonctions' <fichier-entrée> | ||
Ligne 36 : | Ligne 34 : | ||
* Avec la commande | * Avec la commande | ||
<pre> | <pre> | ||
− | sed | + | sed '4d; 7d' test.txt |
</pre> | </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 | 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> | <pre> | ||
− | sed | + | sed '4d; 7d' test.txt > test2.txt |
</pre> | </pre> | ||
− | * L'effacement de lignes | + | * L'effacement de lignes contenant un certain motif ([[Regexp|expression régulière]]) est possible. Le motif à rechercher doit être balisé par 2 symboles « / ». Par exemple, |
<pre> | <pre> | ||
− | sed '/^#/ d' test.txt | + | sed '/^#/d' test.txt |
</pre> | </pre> | ||
supprime toutes les lignes débutant par un dièse (<tt>^</tt> signifie « début de ligne »). | supprime toutes les lignes débutant par un dièse (<tt>^</tt> signifie « début de ligne »). | ||
− | * La commande <tt>sed</tt> peut effacer une plage de texte comprise entre deux motifs : | + | * La commande <tt>sed</tt> peut également effacer une plage de texte comprise entre deux motifs : |
<pre> | <pre> | ||
− | sed '/ | + | sed '/Bonjour/,/Au revoir/d' test.txt |
</pre> | </pre> | ||
− | supprime toutes les lignes comprises entre « <tt>Bonjour</tt> » et « <tt>Au revoir</tt> ». | + | supprime toutes les lignes comprises entre « <tt>Bonjour</tt> » et « <tt>Au revoir</tt> » (inclusivement). |
=== Chercher et remplacer === | === Chercher et remplacer === | ||
− | + | 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 : | |
<pre> | <pre> | ||
s/motifRecherché/motifSubstitut/ | s/motifRecherché/motifSubstitut/ | ||
</pre> | </pre> | ||
− | Par défaut, le remplacement de <tt>motifRecherché</tt> par <tt>motifSubstitut</tt> n'a lieu | + | 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> : |
<pre> | <pre> | ||
s/motifRecherché/motifSubstitut/g | s/motifRecherché/motifSubstitut/g | ||
Ligne 67 : | Ligne 65 : | ||
Dans l'exemple ci-dessous, toutes les occurrences de « <tt>Paris</tt> » sont remplacées par « <tt>Montréal</tt> » dans <tt>fichier.txt</tt> : | Dans l'exemple ci-dessous, toutes les occurrences de « <tt>Paris</tt> » sont remplacées par « <tt>Montréal</tt> » dans <tt>fichier.txt</tt> : | ||
<pre> | <pre> | ||
− | sed | + | sed 's/Paris/Montréal/g' fichier.txt |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</pre> | </pre> | ||
− | |||
== Voir aussi == | == Voir aussi == | ||
Ligne 96 : | Ligne 74 : | ||
* [[Commandes_élémentaires|Commandes élémentaires]] | * [[Commandes_élémentaires|Commandes élémentaires]] | ||
* [[Regexp|Expressions régulières]] | * [[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