« TP sed »
Master MIASHS, ID
Philippe Preux
Université de Lille 3
Semestre 1

Pour répondre à certaines questions, il peut être utile d'utiliser des choses que l'on a vu dans le TP d'initiation à Linux et le TP grep.

Il s'agît d'un TP sur la commande sed. Il faut donc utiliser cette commande pour répondre aux questions du TP. La réponse correcte aux questions consiste à donner la commande Linux qui vous permet de répondre à la question.

Le problème général que l'on veut étudier concerne la transformation automatique de documents texte (des news) en documents xml. Cela sera réalisé en concevant des scripts sed. sed est l'outil idéal pour réaliser ce genre de tâche consistant à transformer un fichier texte en fichier balisé (html, xml, latex, groff pour n'en citer que quelques-uns), ou le contraire.

À faire

On va commencer par travailler sur les fichiers contenus dans cette archive que vous mettez dans votre répertoire personnel et que vous décompressez par tar zxf fichier2.tgz. Cela crée 10 fichiers.

  1. ces 10 fichiers sont 10 messages de news. Repérez les différents champs de chaque message
    Une news (ou un email) est constitué d'un en-tête et d'un corps ; l'en-tête contient des informations concernant le message : son sujet, qui l'a envoyé, à qui, quand, ... Le corps contient le texte lui-même du message. L'en-tête est constitué d'une suite de lignes (ne contenant aucune ligne blanche) de la forme Champ: contenu-du-champ. L'en-tête est séparé du corps par une ligne blanche : c'est la première ligne blanche du message.
  2. imaginez une DTD qui va permettre de représenter ces fichiers sous forme XML. On ne demande pas ici d'être très précis au niveau de cette DTD. On veut juste avoir suffisamment d'information pour pouvoir générer un fichier XML correct correspondant à un message ;
  3. écrivez un script sed qui transforme les champs From: des emails en une paire de balises <from> </from>
    Par exemple, pour le premier email du fichier, le champ From: prb@access.digex.com (Pat) sera transformé en <from>prb@access.digex.com (Pat)</from>.
    Conseil : faites cette opération en effectuant deux substitutions, la première pour la balise de fin de champ, la seconde pour la balise de début de champ ;
  4. faites de même pour les autres champs des messages. Ainsi, l'en-tête du premier email qui est :
    Path: cantaloupe.srv.cs.cmu.edu!rochester!udel!news.intercon.com!digex.com!digex.com!not-for-mail
    From: prb@access.digex.com (Pat)
    Newsgroups: sci.space
    Subject: Re: NAVSTAR positions
    Date: 21 Apr 1993 18:23:05 -0400
    Organization: Express Access Online Communications, Greenbelt, MD USA
    Lines: 7
    Message-ID: <1r4hg9$sgi@access.digex.net>
    References: <1993Apr19.063455.26363@ericsson.se>
    NNTP-Posting-Host: access.digex.net
    
    deviendra
    <path>cantaloupe.srv.cs.cmu.edu!rochester!udel!news.intercon.com!digex.com!digex.com!not-for-mail</path>
    <from>prb@access.digex.com (Pat)</from>
    <newsgroups> sci.space</newsgroups>
    <subject>Re: NAVSTAR positions</subject>
    <date>21 Apr 1993 18:23:05 -0400</date>
    <organization>Express Access Online Communications, Greenbelt, MD USA</organization>
    <lines>7</lines>
    <messageid><1r4hg9$sgi@access.digex.net></messageid>
    <references><1993Apr19.063455.26363@ericsson.se></references>
    <nntppostinghost>access.digex.net</nntppostinghost>
    
  5. ajoutez une balise pour y placer le texte du message.
    Conseil : après avoir réfléchi aux substitutions à faire, vous pouvez vous aider de la FAQ sed pour trouver la solution au placement de la balise de début de message. Le placement de la balise de fin est facile ; les deux transformations se feront successivement à l'aide de deux commandes sed pipelinées.
  6. enfin, ajoutez une balise en début et en fin de message pour obtenir un fichier xml complet ;
  7. en principe, vous avez fini. Appliquez votre script sur les fichiers de cette archive ; regardez le résultat, déterminez s'il est conforme à vos attentes et, si non, corrigez votre script ;
  8. à l'issue de ces manipulations, vous devez avoir obtenu des fichiers xml valide. Utilisez firefox pour vérifier que celui-ci interprète correction la dtd et le fichier xml.

Liens