Supprimer des lignes du fichier perl

Résolu
rimrita Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   -  
-
Bonjour,
je veux un script en perl qui supprime les lignes du fichier log qui ont un status <> sent,
le fichier est structuré comme ci

Mar 2 04:18:32 smtp postfix/smtp[****]: 1****.***.***.***: to=<****@****>, relay=1****.***.***.***[1****.***.***.***]:25, delay=****, delays=******, dsn=4.1.2, status=deferred (host ****.****[1****.***.***.***] said: 55 1 <.1.2*****@****>: Recipient address rejected: Domain not found (in reply to RCPT TO command))
Mar 2 05:19:06 s p/cleanup[****]: 0: message-id=<****@nnnn>
Mar 2 04:18:32 smtp postfix/smtp[****]: 1****.***.***.***: to=<****@****>, relay=1****.***.***.***[1****.***.***.***]:25, delay=****, delays=******, dsn=4.1.2, status=deferred (host ****.****[1****.***.***.***] said: 55 1 <.1.2*****@****>: Recipient address rejected: Domain not found (in reply to RCPT TO command))
Mar 2 05:19:06 s p/cleanup[****]: 0: message-id=<****@nnnn>
Mar 2 04:18:32 smtp po/smtp[****]: 1****.***.***.***: to=<****@****>, relay=1****.***.***.***[1****.***.***.***]:25, delay=****, delays=******, dsn=4.1.2, status=deferred (host ****.****[1****.***.***.***] said: 55 1 <.1.2*****@****>: Recipient address rejected: Domain not found (in reply to RCPT TO command))
Mar 2 05:19:06 s p/cleanup[****]: 0: message-id=<****@nnnn>
Mar 2 04:18:32 smtp po/smtp[****]: 1****.***.***.***: to=<****@****>, relay=1****.***.***.***[1****.***.***.***]:25, delay=****, delays=******, dsn=4.1.2, status=sens (host ****.****[1****.***.***.***] said: 1 <.1.2*****@****>: Recipient address rejected: Domain not found (in reply to RCPT TO command))



A voir également:

4 réponses


 
Bonjour,

La dernière ligne indique "status=sens" et non pas "status=sent" et ce qui suit indique visiblement une erreur. Tu es sûre que les lignes "sent" se présentent comme cela ?


Dal
0
rimrita Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
oui oui je suis sure, c'est juste une faute de frappe
0
rimrita Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
voila une ligne qui contient sent correctement

Mar  2 05:14:11 smtp p/smtp[***]: ****: to=<***@****>, relay=***.***.**.**[***.***.**.***]:25, delay=0.15, delays=./0.0/0./0.0, dsn=0.0.0, status=sent (**** *.0.0 Ok: queued as *******)
0

 
Donc, le plus simple est de faire un grep avec une négation de la regexp matchant une ligne correcte status=sent

Quelque chose comme cela :

#!/usr/bin/perl

use strict;
use warnings;

open LIRE,"fichier_test.txt"
    or die "E/S : $!\n";

my @tmp = <LIRE>;
my @log = grep {!/.*status=sent.*Ok: queued as /} @tmp;                                     

print @log;


Dal
0