Différences entre les versions de « La commande sed »
Ligne 57 : | Ligne 57 : | ||
=== Chercher et remplacer === | === Chercher et remplacer === | ||
− | La commande sed | + | La commande <tt>sed</tt> offre la possibilité de rechercher un motif et de le remplacer par un autre. Voici la syntaxe de la commande : |
− | < | + | <pre> |
− | + | s/motifRecherché/motifSubstitut/ | |
+ | </pre> | ||
+ | Le remplacement de <tt>motifRecherché</tt> par <tt>motifSubstitut</tt> aura lieu | ||
+ | |||
La substitution va se faire sur la première occurrence du motif.<br/><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''' | Pour que le remplacement se fasse sur tout le texte, il faut ajouter l'option '''g''' comme ceci : s/motif/substitut/'''g''' |
Version du 28 mai 2013 à 14:32
sed [options] 'fonctions' <fichier-entrée>
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 qu'il convient de séparer 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 -e, la commande sed s'exécute à partir du terminal alors qu'avec l'option -f, elle exécute les fonctions contenues dans un fichier script :
sed -f <fichier_script> [options] 'fonctions' <fichier-entrée>
Exemples
Suppression
- Avec la commande
sed -e '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 -e '4d; 7d' test.txt > test2.txt
- On peut aussi utiliser des expressions régulières pour appliquer la commande sur toutes les lignes où un motif est trouvé. Le motif à rechercher doit être contenu entre 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 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 ».
Chercher et remplacer
La commande sed offre la possibilité de rechercher un motif et de le remplacer par un autre. Voici la syntaxe de la commande :
s/motifRecherché/motifSubstitut/
Le remplacement de motifRecherché par motifSubstitut aura lieu
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
sed -e 's/Paris/Montreal/g' fichier.txt
remplace toutes les occurrences de Paris par Montreal dans le texte passé en entrée et affiche le résultat à l'écran.
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 et afficher le résultat à 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'''/éèê/eee/' test.txt
remplace les 'e' accentués par des 'e' sans accents.