filtre sed linux
DESCRIPTION
Présentation et utilisation de la commanede "Sed"TRANSCRIPT
-
Filtre Sed - Prsentation des fonctionnalits
Le programme informatique sed (Stream Editor) est un diteur de flux textuel trs puissant.
La plupart des personnes utilisent sed pour ses fonctionnalits de substitutions de chanes de
caractres. Il est possible, par exemple, grce au filtre sed de rechercher du texte dans un
fichier et de modifier ce dernier. La puissance du filtre sed vient galement du fait qu'il est
possible d'utiliser des expressions rgulires.
Son principe de fonctionnement est le suivant:
Sed lit en entre les donnes ligne par ligne (en provenance d'un fichier ou d'ailleur) et
modifie ces dernires selon des rgles spcifiques entres par l'utilisateur.
On peut dire que le filtre sed est une sorte d'diteur de texte non interactif ou editeur de texte
en ligne de commande.
I. Syntaxe d'utilisation
La commande sed contient une ou plusieurs commandes d'ditions et ventuellement des
options.
sed [OPTIONS] 'commande d'dition' [fichier...]
Le filtre Sed met dispositions diverses options et commandes d'ditions. Nous verrons dans
un premier temps (dans le sous chapitre I.a.) quelles sont les diffrentes options disponibles,
puis dans un deuxime temps (dans le sous chapitre I.b.), nous aborderons les commandes
d'ditions.
I.a. Options :
Je ne vous parlerai ici que des options sed les plus couramment utilises. Vous pourrez
ventuellement taper la commande man sed pour avoir une liste d'options plus complte.
-e commande
L'option -e est trs utile car elle permet d'utiliser plusieurs commandes d'dition la suite.
Exemple : sed -e 'commande' -e 'commande'
-f Fichier_Script
Cette option permet d'ajouter des commandes d'dition se trouvant dans un fichier script.
Faire un fichier script est trs simple, il suffit de remplir ce dernier avec des commandes
dditions (chaque ligne doit comporter une commande d'dition diffrente).
-i[SUFFIXE]
Par dfaut sed ne modifie pas directement le fichier qui est fournit en paramtre mais affiche
le rsultat du traitement sur la sortie standard (stdout). Grce cette option sed modifiera
directement le fichier fournit en paramtre. On ventuellement mettre un suffixe pour
effectuer une sauvegarde du fichier fournit (Exemple de suffixe: -i.bak)
I.b. Commandes d'ditions sed:
-
Pour diter le texte sed met a disposition plusieurs commandes d'ditions permettant de
spcifier les rgles de modification souhaites. Ces dernires ont une syntaxe d'utilisation
particulire que je vais tenter de vous dcrire.
La syntaxe d'utilisation des commandes d'ditions sed est la suivante :
[addresse[,addresse]]commande d'dition[arguments]
Comme vous pouvez l'observer, une commande d'dition sed peut tre prfix par une ou
deux adresses.
Les adresses :
Les adresses correspondent des lignes du texte. Il est possible de spcifier les numros de
lignes, par exemple les adresses 5,7 indiqueront la commande sed d'agir sur les lignes 5 7.
On peut galement utiliser des expressions rgulires, par exemple l'adresse /motif/ indiquera
sed de traiter les lignes correspondantes l'expression rgulire motif. Chaque ligne
contenant la chane de caractres motif sera alors traite. On peut deux la mme faon utiliser
deux expressions rgulires, par exemple /motif1/,/motif2/ correspond un domaine de lignes
compris entre motif1 et motif2. Nous verrons plus bas comment utiliser les expression
rgulires.
Maintenant nous allons aborder les commandes d'ditions sed disponibles pour editer le texte.
Ces dernires peuvent supporter parfois qu'une seule adresse maximale. D'autres peuvent en
supporter deux.
Les commandes d'ditions sed pouvant supporter une adresse :
[adresse]i
Cette commande d'dition sed permet dinsrer du texte avant la ligne correspondante l'adresse. Si aucune adresse n'est spcifie le texte sera insr au dbut.
[adresse]a Ajoute du texte aprs la ligne.
q Afficher les n premires lignes.
II. Insrer et ajouter du texte
Vous pouvez utiliser la commande i pour insrer du texte avant une ligne et a pour ajouter du
texte aprs une ligne.
Ajouter Bonjour monsieur aprs la ligne 5
sed '5a\Bonjour monsieur\' fichier.txt
Insrer Bonjour monsieur avant la ligne 5
sed '5i\Bonjour monsieur\' fichier.txt
-
III. Substitution
Sed permet de rechercher et remplacer des mots ou des parties de texte, on appelle cela:
substituer des chanes de caractres.
Par exemple pour substituer une occurrence par une autre:
Remplacer romain par julien
sed -e 's/romain/julien/' fichier.txt
III.a. Utiliser l'option global g
Sed traite le flux ligne par ligne. Attention, sans l'option g sed ne traitera que la premire
occurrence trouv sur la ligne en cours de traitement, c'est dire que si sur une mme ligne, la
chane de caractres recherche apparat plusieurs fois, seulement la premire occurrence sera
traite. L'option g permet de traiter toutes les occurrences.
Utilisation de l'option g (global)
sed -e 's/toto/titi/g' fichier.txt
III.b. Utiliser l'option de ngation !
Afin d'inverser la fonction sed utilise, il est possible d'utiliser l'oprateur ! dit de ngation.
Voici un exemple:
Remplacer tonton par tati sauf la ligne 5
sed '5!s/tonton/tati/g' fichier.txt
III.c. Agir uniquement sur certaines lignes du fichier
Il possible de dire sed de ne traiter qu'une partie du fichier texte, pour cela on utiliser une
plage d'adresse correspondant aux lignes qu'on souhaite traiter.
Voici ci dessous un exemple:
Remplacer tonton par tati uniquement entre les lignes 5 et 12
sed '5,12s/tonton/tati/g' fichier.txt
III.d. Slectionner les occurrences
Si jamais il y a plusieurs occurrences d'une mme chane sur une mme ligne, il est possible
d'indiquer sed laquelle on souhaite traiter.
Exemple:
Remplacer seulement la deuxime occurrence du mot tlphone par le mot fax
sed 's/telephone/fax/2'
IV. Afficher du texte
L'option p qui a pour signification print permet de slectionner et d'afficher du texte.
Afficher les lignes 18 25
sed -n '18,25p' fichier.txt
Il est possible avec sed de slectionner un paragraphe.
-
Afficher le paragraphe qui commence par la ligne contenant la chane de caractre prendre la
voiture et qui termine par la ligne contenant la chane arriver le soir
sed -n '/prendre la voiture/,/arriver le soir/p' monfichier
V. Effacer du texte
Sed permet grce la fonction d (delete) deffacer des chanes de caractres. Par exemple, si vous souhaitez ffacer les lignes 18 25 d'un fichier, vous pouvez taper la
commande suivante:
sed '18,25d' fichier.txt
Si maintenant, vous souhaitez effacer tout sauf les trois premires lignes d'un fichier, vous
pouvez taper la commande suivante:
sed '1,3!d' fichier.txt
VI. Les mta-caractres
Les mtacaractres sont des caractres typographiques spciaux qui permettent de crer des
expressions rationnelles; ces dernires sont utiles pour rechercher des chanes de caractres
rpondant certain critres.
Metacaractre Description
.
Dsigne un seul caractre quelconque except le caractre '\n' (nouvelle
ligne).
Par exemple:
tot. correspond tota, totb, totc, totd, tote etc...
^
Indique le dbut de la ligne
Par exemple:
^root identifie une ligne commenant par root
$
Indique la fin d'une ligne
Par exemple:
mcanisme$ identifie une ligne finissant par mcanisme
[ ]
Correspond n'importe quel caractres cits entre les crochets
Exemple 1 :
[tT]toto correspond aux chanes de caractres toto et Toto
Exemple 2 :
[a-z] correspond l'intervalle de caractres de a jusqu' z
Exemple 3 :
[4-9] correspondant l'intervalle de caractres de 4 9 c'est dire 4,5,6,7,8,9
-
Exemple 4 :
1[4-9]0 correspondant 140,150,160,170,180,190
VI.a. Exemples d'utilisation des mtacaractres avec la commande Sed:
VI.a.1. Exemple d'utilisation du mtacaractre .
Remplacer ce qui commence par tot et qui fait 4 caractres par toto
sed -e "s/tot./toto/g"
Le mtacaractre . reprsente un caractre quelconque.
VI.a.2. Exemple d'utilisation du metacaractre ^
Effacer les lignes dbutant par ^root
sed -e "/^root/d"
Modifier les lignes qui dbutent par root en substituant ce dernier par user
sed -e "s/^root/user/"
VI.a.3. Exemple d'utilisation du metacaractre $
Supprimer les lignes finissant par la chane de caractres toto
sed "/toto$/d"
Supprimer les lignes vides
sed -e "/^$/d"
Modifier les lignes terminant par ; par le caractre .
sed -e "s/$;/\./"
VI.a.4. Exemple d'utilisation des metacaractres []
Remplacer les chanes qui commencent par toto et qui finissent par un chiffre entre 0 et 9 par
la chane tata
sed -e "s/toto[0-9]/tata/g"
Supprimer les caractres a, b ou c
sed -e "s/[abc]//g"
VII. Les quantificateurs
Les quantificateurs se place aprs un caractres et permettent d'exprimer une valeur de
rptition ou de nullit.
Quantificateurs Description
*
Aucun ou plusieurs caractre qui le prcde
Exemple :
-
toto* correspond tot, toto, totoo, totooo etc...
Remarque:
.*Correspond zro ou plusieurs caractres quelconques
?
Zro ou une occurrence du caractre qui le prcde
Exemple :
toto? correspond tot ou toto
+
Un ou plusieurs caractres qui le prcde
Exemple :
toto+ correspond toto, toto, totoo, totooo etc...
VII.a. Exemples d'utilisation des quantificateurs avec Sed:
VII.a.1. Exemple d'utilisation du quantificateur *
Remplacer tout ce qui commence par tot et qui est suivi du caractre o zro ou plusieurs fois
(c'est dire: tot, toto, totoo, totooo, totoooo...) par la chane baba
sed -e "s/toto*/toto/g"
Supprimer les chanes de caractres qui commencent par toto, qui contiennent n'importe quels
caractres et finissent par baba
sed -e "/^toto.*baba$/d"
VII.a.2. Exemple d'utilisation du quantificateur ?
Remplacer tat ou tati par toto
sed -e "s/tati?/toto/g"
VII.a.2. Exemple d'utilisation du quantificateur +
Remplacer ce qui correspond tata, tataa, tataaaa etc... par le mot toto
sed -e "s/tata+/toto/g"