Différences entre les versions de « La commande sed »
Ligne 29 : | Ligne 29 : | ||
sed -e '4d; 7d' test.txt | sed -e '4d; 7d' test.txt | ||
</pre> | </pre> | ||
− | * efface les lignes 4 et 7 (option d pour delete) du texte | + | * 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'''/''' | 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'''/''' | ||
Ligne 40 : | Ligne 40 : | ||
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 | + | * 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 === | === Chercher et remplacer === | ||
Ligne 46 : | Ligne 47 : | ||
La commande sed permet de rechercher et remplacer du texte à partir d'expressions régulières ou de chaîne de caractères. | La commande sed permet de rechercher et remplacer du texte à partir d'expressions régulières ou de chaîne de caractères. | ||
<br/> | <br/> | ||
− | + | Syntaxe : s/motifRecherché/substitut/<br/> | |
La substitution va se faire sur la première occurrence du motif.<br/> | La substitution va se faire sur la première occurrence du motif.<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''' | ||
Ligne 60 : | Ligne 61 : | ||
- sed -re 's/\t/ /g' nomfichier | - sed -re 's/\t/ /g' nomfichier | ||
</pre> | </pre> | ||
− | * remplace les tabulations par | + | * remplace les tabulations par un espace. |
===Échange de caractères === | ===Échange de caractères === | ||
− | + | ||
+ | syntaxe : y/listeCaractères/listeRemplacants/. | ||
<pre> | <pre> | ||
− | sed -re 'y/àâ/aa/' test.txt | + | sed -re ''''y'''/àâ/aa/' test.txt |
</pre> | </pre> | ||
* remplace les 'a' accentués par des 'a' sans accents. | * remplace les 'a' accentués par des 'a' sans accents. | ||
− | |||
− | |||
− | |||
== Voir aussi == | == Voir aussi == |
Version du 14 décembre 2010 à 11:27
Description
Le mot sed signifie "éditeur de flux" (Stream EDitor).
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
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
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.
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
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 <pre/> * 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. <pre> - 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.