Vous n'êtes pas identifié(e).
Pages : 1
La commande Sed
1. Introduction
Sed est une des composantes essentielles à tout système Unix.
C’est un éditeur de texte non interactif, au sens où il se pilote soit par la ligne de commande, soit par le biais d’un script.
Sed est un logiciel puissant, capable d’effectuer de nombreuses modifications (ajout, suppression, insertion...)
au sein d’un ou plusieurs flux de texte.
Pour de plus amples informations, veuillez vous référer à sa page de manuel :
[user@linux ~]$ man sed
2. Fonctionnement
La syntaxe générale de sed est la suivante :
sed [-n] [-e commande] [-f fichier de commandes] [fichier]
Les options de sed 1
Option Description
-------- --------------
-n Ecrit seulement les lignes spécifiées (par l'option /p) sur la sortie standard.
-e Permet de spécifier les commandes à appliquer sur le fichier. Cette option est utile lorsque vous appliquez plusieurs commandes. Afin d'éviter que le shell n'interprète certains caractères, il faut encadrer la commande avec ' ou avec ".
-f Lit les commandes dans le fichier spécifié.
Afin de sélectionner les lignes à traiter, sed utilise un système d’adresses : soit un numéro ou une plage de
lignes, soit une expression régulière que doit satisfaire la ligne pour être prise en compte (cf. le cours sur les expressions régulières).
Ainsi, la forme générale d’une commande est :
adresse commande
Voici les différentes formes d’adresses :
Les options de sed 2
Options Description
--------- ---------------
aucune option Toutes les lignes
n La ligne n
n,m La portion de texte entre les lignes n et m
regex Les lignes reconnues par l’expression régulière regex
3. Commandes
Dans toutes les commandes, il est possible d’utiliser les références arrières. Si dans une première partie de
l’expression, nous reconnaissons un ou plusieurs motifs : /[0-9][a-Z]/, ils deviennent disponibles dans la
seconde partie de l’expression sous la forme de "\x" ou x est le numéro du motif. Ainsi :
s/[0-9][a-Z]/\2\1/
Inverse l’ordre du chiffre et de la lettre.
Exemple d'application
[user@linux ~]$ sed -e "s/\([0-9][0-9]*\)/abricot\1abricot/" fichier
La chaîne 3linux deviendra linuxabricot3abricot
La sous chaîne \([0-9][0-9]*\) désigne un ou plusieurs chiffres, chacun sera entouré d'une chaîne de
charactères "abricot".
3.1. Substitution
La syntaxe générale de la commande de substitution est la suivante :
ad1,ad2 s/regex/remplacement/options
Remplace les chaînes reconnues par l’expression régulière regex par la chaîne de remplacement entre les lignes ad1 à ad2 (facultatif).
Exemple: Sed et Substitution
[user@linux ~]$ sed "s/tux/TUX/" fichier
Cela va changer la première occurence de la chaîne tux par TUX (la première chaîne tux uniquement)
[user@linux ~]$ sed "s/tux/TUX/3" fichier
La 3ème occurence de la chaîne tux sera changé en TUX
Les options de la commande de substitution, qui sont facultatives sont listées ci-dessous (il est possible d’en
spécifier plusieurs en les concaténant):
Sed et Substitution
Option Description
-------- --------------
g Global, c'est à dire toutes les occurrences de la chaîne seront remplacées (par défaut seule la première occurrence est remplacée)
p Imprime la ligne (utile avec l'option -n)
w fichier Ecrit la ligne dans le fichier spécifié en plus de la sortie standard.
Example: Sed et la Substitution
[user@linux ~]$ sed "s/[Tt]ux/Supertux/g" mon_fichier
Remplace toutes les occurrences de Tux ou tux par Supertux dans tout le fichier mon_fichier.
[user@linux ~]$ sed -e "s/\([0-9][0-9]*\)/**\1**/" fichier
Encadre le premier nombre de la ligne avec des ** (utilisation des références arrières).
3.2. Négation
Il est possible d’inverser le sens d’une expression régulière : n’afficher que les lignes qui ne contiennent pas
BSD par exemple. La syntaxe générale est la suivante :
ad1,ad2 !fonction argument
La fonction est appliquée à toutes les lignes qui ne correspondant pas à la caractérisation.
Example: Sed et la Négation
[user@linux ~]$ sed -e '/[a-cA-C]/!p' fichier
Affiche toutes les lignes qui ne contiennent pas abc ou ABC
3.3. Suppression
Efface les lignes reconnues par l’expression régulière ou spécifiées par les adresses (au niveau de la sortie, le
fichier d'origine n'est pas modifié).
Example: Sed et la suppression
[user@linux ~]$ sed "1,10d" mon _fichier
- Sortie du fichier à partir de la onzième ligne.
[user@linux ~]$ sed "/^From/!d" mon _fichier
- On efface tout sauf les lignes commencant par « From », donc on n'imprime que les lignes commencant par « From ».
Tip
Il est parfois plus facile de caractériser la négation de ce que l'on veut (voir exemple précédent).
3.4. Insertion
Il existe deux commandes d’insertion :
• Ecrire le texte après la ligne
[user@linux ~]$ sed a\texte monfic
• Ecrire le texte avant la ligne
[user@linux ~]$ sed i\texte monfic
3.5. Autres commandes
Les autres commandes de Sed
Option Description
-------- --------------
q Stoppe l’exécution de sed
= Ecrit les numéros de ligne
w fichier Ecrit dans un fichier
Comme je ne vais quand meme pas m'accaparer le travail de l'auteur qui a écrit cette partie de manuel provenant du pdf Essentiel sur LPIC-101, voici un lien où vous pourrez obtenir les ressources moyennant une petite inscription pour accéder gratuitement aux contenus via open-campus:
http://www.supinfo.com/fr/Default.aspx
Hors ligne
Pages : 1