[SED/AWK] le corps d'un mail

le corps d'un mail [SED/AWK] - Shell/Batch - Programmation

Marsh Posté le 23-01-2005 à 21:26:07    

bah voila je cherche a lire le fichier mailBox, contenant plusieurs mails.
Je voudrais viré toutes les entetes, c'est a dire du premier "From" à apres "Date" pour ne  garder que les corps de messages...
 
Alors deux problemes:
1. Comment voir qu'on passe d'un mail a un autre... (je suis parti sur l'hypothese que le mail suivant repondait a la contrainte "ligne vide suivit d'un From" )
 
2. comment ne garder que les entetes ?
 
 
Je suis parti avec sed et ca donne ...
 
pour baliser un mail
marquerMail.sed

Code :
  1. #insertion avant le mail d'un '#-NewMSG-#'
  2. /From /i #NewMSG#
  3. #insertion apres le mail d'un '#-NewMSG-#'
  4. $ a #NewMSG#


 
pour garder le corps
garderCorpsMail.sed

Code :
  1. /From toto@;*/
  2. {
  3.         #traitement des entetes
  4.         :entete
  5.                 N
  6.                 #si pas longeur vide goto "entete"
  7.                 /\n$/!b entete
  8.        
  9.                 #supression de l'entete
  10.                 s:.*:: 
  11.         #traitement du message en lui meme
  12.         :corpsMsg
  13.                 N
  14.                 s:\n#-NewMSG-#::;t nextMsg
  15.                 b corpsMsg
  16.                
  17.         #traitement message suivant
  18.         :nextMsg
  19.         p
  20. }


 
le tout s'enchainant par  

Code :
  1. $> sed -f marquerMail.sed mbox | sed -f garderCorpsMail.sed | sed -e '/^$/d' > corpsMails


 
Mais ca ne marche pas terrible, vous auriez pas des idées ?
Merci

Reply

Marsh Posté le 23-01-2005 à 21:26:07   

Reply

Marsh Posté le 23-01-2005 à 23:25:24    

d'une facon extrement plus simple j'arrive a extraire le premier mail ... mais pas tous
 
sed -e '1,/^$/ d'
 
:/


Message édité par !cricri le 23-01-2005 à 23:25:59
Reply

Marsh Posté le 24-01-2005 à 14:33:29    

Bonjour
 
avec awk tu peux gérer un temoin d'affichage que tu desactive qd on detecte le chaine "commencant par From"
jusqu'a la detection de la chaine "commencant par Date"
 
tout ca pour dire ;-)) :
 
awk 'BEGIN{affiche=0;n=1;}
/^From/{print " ## Message " n++;affiche=0;}
/^Date/{affiche=1;next;}
affiche==1 {print;}'
 

Reply

Marsh Posté le 24-01-2005 à 20:52:59    

lol
ok merci de tes lumieres :p

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed