Supprimer des lignes du fichier perl
Résolu
rimrita
Messages postés
22
Statut
Membre
-
[Dal] Messages postés 6373 Statut Contributeur -
[Dal] Messages postés 6373 Statut Contributeur -
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
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:
- Supprimer des lignes du fichier perl
- Supprimer rond bleu whatsapp - Guide
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier impossible à supprimer - Guide
- Fichier rar - Guide
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
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
Comme tu dis que c'est une faute de frappe, cela confirme mes doutes.
Je pense que, pour faire ton exemple, tu as pris une ligne "status=deferred" que tu as changée en "status=sens" (avec une faute), et du coup, même si on met "status=sent" à la place, ce qui suit n'est pas représentatif de ce qu'est un message correctement envoyé, car ce qui suit indique une erreur "Recipient address rejected: Domain not found".
Donc, je pense que ta source de données d'exemple n'est pas correcte et n'est pas représentative de ce qu'est vraiment un e-mail "sent".
Peux-tu stp, confirmer cela et donner une ligne "sent" réelle et représentative.
Dal
Je pense que, pour faire ton exemple, tu as pris une ligne "status=deferred" que tu as changée en "status=sens" (avec une faute), et du coup, même si on met "status=sent" à la place, ce qui suit n'est pas représentatif de ce qu'est un message correctement envoyé, car ce qui suit indique une erreur "Recipient address rejected: Domain not found".
Donc, je pense que ta source de données d'exemple n'est pas correcte et n'est pas représentative de ce qu'est vraiment un e-mail "sent".
Peux-tu stp, confirmer cela et donner une ligne "sent" réelle et représentative.
Dal
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 *******)
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 :
Dal
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