« TP sed »
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.
- 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.
- 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 ;
- é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 ;
- 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>
- 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.
- enfin, ajoutez une balise en début et en fin de message pour
obtenir un fichier xml complet ;
- 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 ;
- à 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