filtre sed linux

6
Filtre Sed - Présentation des fonctionnalités Le programme informatique sed (Stream Editor) est un éditeur de flux textuel très puissant. La plupart des personnes utilisent sed pour ses fonctionnalités de substitutions de chaînes de caractères. Il est possible, par exemple, grâce 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 régulières. Son principe de fonctionnement est le suivant: Sed lit en entrée les données ligne par ligne (en provenance d'un fichier ou d'ailleur) et modifie ces dernières selon des règles spécifiques entrées 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 différentes options disponibles, puis dans un deuxième 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 utilisées. Vous pourrez éventuellement taper la commande man sed pour avoir une liste d'options plus complète. -e commande L'option -e est très 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 très simple, il suffit de remplir ce dernier avec des commandes d’éditions (chaque ligne doit comporter une commande d'édition différente). -i[SUFFIXE] Par défaut sed ne modifie pas directement le fichier qui est fournit en paramètre mais affiche le résultat du traitement sur la sortie standard (stdout). Grâce à cette option sed modifiera directement le fichier fournit en paramètre. On éventuellement mettre un suffixe pour effectuer une sauvegarde du fichier fournit (Exemple de suffixe: -i.bak) I.b. Commandes d'éditions sed:

Upload: kone

Post on 09-Sep-2015

3 views

Category:

Documents


0 download

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"