next up previous contents index
suivant: Exemple 4 monter: Exemples avancés précédent: Exemple 2   Table des matières   Index


Exemple 3

Le but de cet exemple est de :

Nous devons donc procéder en deux étapes :

Première étape :

Le premier traitement à effectuer est celui de supprimer toute ligne commançant par « # ». En effet, si notre commande supprime tout d'abord tout ce qui suit le caractère « # », y compris celui-ci, nous obtiendrons une ligne blanche à supprimer, qu'il ne sera pas possible de distinguer d'une ligne déjà blanche qui, elle, ne devra pas être supprimée.
Seconde étape :

Le traitement doit s'effectuer sur le résultat de la première étape. Nous obtenons une série d'enregistrements (lignes de fichiers) dont, aucune ne commence par « # ». Il ne restera donc plus qu'à substituer tout ce qui suit le caractère « # » par rien, caractère « # » compris. Ce traitement s'effectuera sur toutes les lignes. L'opération de substitution ne s'exécutera donc seulement si il existe une occurence du caractère « # » sur la ligne.

Deux méthodes sont possibles :

Dans un but pédagogique, nous montrerons la seconde méthode. En effet, elle mettra en évidence comment combiner les requêtes entre-elles et aussi la façon de les ordonner.

Examinons la requête à écrire pour exécuter la première étape. Tout d'abord, la commande « sed » associée à la suppression est « d ». À cette commande, la spécification des adresses de début et de fin doit correspondre à toute ligne commençant par « # ». Nous allons donc utiliser une expression régulière et les deux adresses seront identiques. L'expression régulière adéquate correspond à :

  1. début de ligne,
  2. caractère « # »,
  3. quelque chose éventuellement, c'est-à-dire un caractère quelconque un nombre quelconque de fois (zéro éventuellement).
Les correspondances, au niveau des expressions régulières sont :
 Description   Expression  
 début de ligne   ^  
 caractère « # »   #  
 quelque chose éventuellement   .*  

La requête correspondant à la première étape est donc :

/^#.*/d

Examinons maintenant la requête à écrire pour exécuter la seconde étape. Comme il a été dit précédemment, cette requête devra s'appliquer sur toutes les lignes obtenues par la première. Sachant que les requêtes s'exécutent séquentiellement, lors de l'appel à la seconde, les enregistrements qui lui sont fournis sont ceux qui résultent de la première exécution. Par conséquent, les adresses de début et de fin ne sont pas à spécifier car ce sont toutes les lignes qu'il faut traiter.

La commande de substitution de « sed » est « s ». Sa syntaxe est :

s/expression$_1$/expression$_2$/[g]
Ici, « expression$_1$ » devra correspondre à la séquence suivante : Quant à « expression$_2$ », elle devra représenté ce par quoi « expression$_1$ » devra être remplacé, c'est-à-dire « rien ». Par conséquent, « expression$_2$ » sera vide. Il ne nous reste donc plus qu'à formuler l'expression régulère associée à « expression$_1$ ». En fonction de ce que doit décrire « expression$_1$ », nous avons les correspondances suivantes avec les expressions régulières :
 Description   Expression  
 caractère « # »   #  
 quelque chose éventuellement   .*  
 fin de ligne   $  

La requête correspondant à la seconde étape est donc :

s/#.*$//
Nous prenons donc bien en compte tout ce qu'il y a entre la première occurence du caractère « # » jusqu'à la fin de la ligne. Cette entité est substituée par « rien ».

Nous obtenons donc :

sed -e '/^#.*/d' -e 's/#.*$//' fichier


next up previous contents index
suivant: Exemple 4 monter: Exemples avancés précédent: Exemple 2   Table des matières   Index
baudry@esme.fr