Parser la liste des mails de la boîte r00t [Script Shell] - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 04-12-2005 à 17:13:44
je connais le principe mais je maitrise pas trop, une autre idée ??
Marsh Posté le 04-12-2005 à 19:04:43
voilà où j'en suis dans mes tests :
Le fichier /var/mail/root que je veux mettre en forme :
root@triforce /etc/postfix #more /var/mail/root |
après une première commande j'obtiens ça :
root@triforce /etc/postfix #cat /var/mail/root | grep -e "From:" -e "Subject:" |
L'idée si vous ne l'avez pas devinée est d'obtenir un truc de ce genre :
http://www.clubic.com mon.email@free.fr |
Avez-vous une idée pour supprimer les retours à la ligne et le texte inutile qui peut se trouver entre ces entrées (sed ne convient pas pour cette opération car il travaille ligne par ligne ) ?
Merci
Marsh Posté le 04-12-2005 à 19:26:02
Quelque chose comme ça ?
sed -ne '/^Subject:/ {h};/^From:/ {H; g; s/Subject: \(.*\)\nFrom: \([^ ]*\) .*/\1 \2/p} /var/mail/root |
Marsh Posté le 04-12-2005 à 19:40:04
J'ai une drôle d'erreur :
root@triforce /etc/postfix #sed -ne '/^Subject:/ {h};/^From:/ {H; g; s/Subject: \(.*\)\nFrom: \([^ |
Est-ce du au fait que je suis sous OpenBSD ?
Marsh Posté le 04-12-2005 à 19:51:28
sinon peux-tu m'expliquer rapidement le principe de cette commande ? j'ai un peu de mal à distinguer les différentes choses...
Merci en tout cas !
Marsh Posté le 04-12-2005 à 20:25:33
ceyquem a écrit : J'ai une drôle d'erreur :
|
C'est en une seule ligne
Ceci dit je ne sait pas si ça va marcher sur un sed non GNU.
ceyquem a écrit : sinon peux-tu m'expliquer rapidement le principe de cette commande ? j'ai un peu de mal à distinguer les différentes choses... |
L'option -n de sed sert à lui dire de rien afficher par défaut (c'est peut être spécifique à gnu sed d'ailleurs)
/^Subject:/ { # Quand on rencontre une ligne qui commence par "Subject:" |
Reste la regex :
Subject: \(.*\)\nFrom: \([^ ]*\) .*
. = n'importe quel caractère
* = 0 fois ou plus
Les parenthèses servent simplement à nous permettre de réutiliser le résultat.
[^ ] = N'importe quel caractère sauf un espace (c'est pour ne pas avoir ce qui suit l'adresse mail dans le from). C'est le ^ qui permet de dire "sauf" quand il est placé au début d'un set de caractère. Par exemple :
[abc] = Soit a, soit b, soit c.
[abc^] = Soit a, soit b, soit c, soit ^
[^abc] = N'importe quel caractère sauf a, b et c.
Donc entre les premières parenthèses, on matche tout ce qu'il y a après le "Subject: " sur la ligne du sujet.
Entre les secondes parenthèses, on matche tout ce qu'il y a entre "From: " et le premier espace (non inclus).
Marsh Posté le 05-12-2005 à 08:10:24
sed c'est vraiment un truc de sadiques^W^W d'hérétiques
Marsh Posté le 04-12-2005 à 17:10:59
Bonjour,
Dans le cadre du développement d'un script perso, je souhaiterais parser la liste des mails de root (/var/mail/root).
Si je fais un
cat /var/mail/root
j'ai bien la liste des mails avec le contenu mais le format est un peu complexe à parser.
Si j'utilise la commande
mail
j'arrive à avoir une liste de mails qui devient plus facile à manipuler. Cependant, comme la commande attend un retour (exemple : taper q pour quitter), je n'arrive pas à récupérer cette liste.
Avant que je me lance dans une analyse un peu brute du /var/mail/root, je voulais savoir s'il existe un moyen simple de faire la liste des mails de root sous la forme :
[@ expéditeur] [sujet]
(un par ligne)
Merci pour vos infos
Message édité par ceyquem le 04-12-2005 à 19:57:05