Traitement fichier d'erreur par sed....
Résolu/Fermé
A voir également:
- Traitement fichier d'erreur par sed....
- Fichier rar - Guide
- Erreur 0x80070643 - Accueil - Windows
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir fichier .bin - Guide
8 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
5 janv. 2010 à 18:51
5 janv. 2010 à 18:51
Salut,
;-))
[tmpfs]$ cat plop Final-Recipient: RFC822; XXX@XX.org Diagnostic-Code: SMTP; 554 Mail for XXXX@XX.org rejected for policy reasons.Last-Attempt-Date: Tue, 5 Jan 2010 08:21:26 +0100 X-MailidCpg: 367 X-MailidCpg: 367 Final-Recipient: rfc822; XXX@XX.org Diagnostic-Code: smtp; 552 5.2.2 Over quota X-MailidCpg: 367 X-MailidCpg: 367 Final-Recipient: rfc822; XXX@XX.org Diagnostic-Code: smtp; 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1) X-MailidCpg: 367 Final-Recipient: rfc822; XXX@XX.org Diagnostic-Code: smtp; 550 You must check your mail from this IP or SMTP Auth before sending to XXX@XX.org X-MailidCpg: 367 [tmpfs]$ sed -n ' /^Final-Recipient:/{ :z N /.*\n\(Final-Recipient:\|$\)/!{ s/\n/#/ b z } P D } ' plop Final-Recipient: RFC822; XXX@XX.org#Diagnostic-Code: SMTP; 554 Mail for XXXX@XX.org rejected for policy reasons.Last-Attempt-Date: Tue, 5 Jan 2010 08:21:26 +0100#X-MailidCpg: 367#X-MailidCpg: 367 Final-Recipient: rfc822; XXX@XX.org#Diagnostic-Code: smtp; 552 5.2.2 Over quota#X-MailidCpg: 367#X-MailidCpg: 367 Final-Recipient: rfc822; XXX@XX.org#Diagnostic-Code: smtp; 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)#X-MailidCpg: 367 Final-Recipient: rfc822; XXX@XX.org#Diagnostic-Code: smtp; 550 You must check your mail from this IP or SMTP Auth before sending to XXX@XX.org#X-MailidCpg: 367 [tmpfs]$
;-))
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
5 janv. 2010 à 20:29
5 janv. 2010 à 20:29
-n
Affichage à la demande
/^Final-Recipient:/{
Si la ligne commence par... (on définit un ensemble de règles à appliquer entre les accolades)
:z
On définit une étiquette
N
On ajoute la ligne suivante
/.*\n\(Final-Recipient:\|$\)/!{
Si la ligne n'est pas suivie (négation avec "!") après son dernier saut de ligne (matérialisé par \n), de "Final-Recipient:" ou de la dernière ligne (matérialisée par "$")
s/\n/#/
On remplace le saut de ligne par un dièse
b z
Puis on se branche à l'étiquette pour ajouter une nouvelle ligne
}
Fin des règles s'appliquant à la négation.
Derrière s'appliquent les règles définies si la ligne dans l'espace de travail contient "Final-Recipient:" ou la dernière ligne ($) après un caractère de fin de ligne...
P
On imprime la ligne contenu dans l'espace de travail de son début jusqu'au 1er saut de ligne (\n)
D
On efface tout jusqu'au 1er saut de ligne (\n) (en fait on efface ce qu'on vient d'imprimer) et on reprend le cycle au début du script sans charger une nouvelle ligne. En fait à ce moment là, l'espace de travail comprend "^Final-Recipient:".
}
On referme la 1ère accolade
cette methode fonctionne si j'ai des lignes sans X-MailidCpg: ??
Oui.
Voir dans la FAQ : Les pages consacrées à SED
;-))
Affichage à la demande
/^Final-Recipient:/{
Si la ligne commence par... (on définit un ensemble de règles à appliquer entre les accolades)
:z
On définit une étiquette
N
On ajoute la ligne suivante
/.*\n\(Final-Recipient:\|$\)/!{
Si la ligne n'est pas suivie (négation avec "!") après son dernier saut de ligne (matérialisé par \n), de "Final-Recipient:" ou de la dernière ligne (matérialisée par "$")
s/\n/#/
On remplace le saut de ligne par un dièse
b z
Puis on se branche à l'étiquette pour ajouter une nouvelle ligne
}
Fin des règles s'appliquant à la négation.
Derrière s'appliquent les règles définies si la ligne dans l'espace de travail contient "Final-Recipient:" ou la dernière ligne ($) après un caractère de fin de ligne...
P
On imprime la ligne contenu dans l'espace de travail de son début jusqu'au 1er saut de ligne (\n)
D
On efface tout jusqu'au 1er saut de ligne (\n) (en fait on efface ce qu'on vient d'imprimer) et on reprend le cycle au début du script sans charger une nouvelle ligne. En fait à ce moment là, l'espace de travail comprend "^Final-Recipient:".
}
On referme la 1ère accolade
cette methode fonctionne si j'ai des lignes sans X-MailidCpg: ??
Oui.
Voir dans la FAQ : Les pages consacrées à SED
;-))
Impec, je vais maintenant chercher comment eviter de me retrouver avec ce type de ligne :
Final-Recipient: rfc822; ploneux@domotec.fr#Diagnostic-Code: smtp; 554 5.1.0 Sender Denied#X-MailidCpg: 367#Diagnostic-Code: smtp; 550 <pascal.clerc@dtclim.fr>, Recipient unknownLast-attempt-Date: Tue, 05 Jan 2010 08:05:32 +0100#X-MailidCpg: 367
plutot que :
Final-Recipient: rfc822; XX@XX.fr#Diagnostic-Code: smtp; 554 5.1.0 Sender Denied#X-MailidCpg: 367
il faudrait que je compte soir le nombre de ligne a ajouter a Final-Recipient: (2 lignes au max) soit l'enchainement #Diagnostic-Code: puis #X-MailidCpg:
mais j'avaoue que c dur dur sed même avec les 3 partie du tuto SED...je pédale dans la semoule...lol
merci de votre aide.
Final-Recipient: rfc822; ploneux@domotec.fr#Diagnostic-Code: smtp; 554 5.1.0 Sender Denied#X-MailidCpg: 367#Diagnostic-Code: smtp; 550 <pascal.clerc@dtclim.fr>, Recipient unknownLast-attempt-Date: Tue, 05 Jan 2010 08:05:32 +0100#X-MailidCpg: 367
plutot que :
Final-Recipient: rfc822; XX@XX.fr#Diagnostic-Code: smtp; 554 5.1.0 Sender Denied#X-MailidCpg: 367
il faudrait que je compte soir le nombre de ligne a ajouter a Final-Recipient: (2 lignes au max) soit l'enchainement #Diagnostic-Code: puis #X-MailidCpg:
mais j'avaoue que c dur dur sed même avec les 3 partie du tuto SED...je pédale dans la semoule...lol
merci de votre aide.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
6 janv. 2010 à 11:34
6 janv. 2010 à 11:34
Essaie comme ça :
sed -n ' /^Final-Recipient:/{ :z N /.*\n\(Final-Recipient:\|$\)/!{ s/\n/#/ s/\(\(.[^#]*\)\{3\}\).*/\1/ b z } P D } ' plop
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
c nickel comme ca, il me faut juste essayer de bien comprendre pour le modifier,
en effet s'il y a un # dans le message je suis dans la panade, il vaut mieux que je recherche un caracétere qui ne soit pas utilisé dans les messages d'erreur de serveur d'email.
merci merci Monsieur jipicy
en effet s'il y a un # dans le message je suis dans la panade, il vaut mieux que je recherche un caracétere qui ne soit pas utilisé dans les messages d'erreur de serveur d'email.
merci merci Monsieur jipicy
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
6 janv. 2010 à 14:30
6 janv. 2010 à 14:30
De rien ;-))
cette expression fait quoi exactement, elle compte depuis le debut du pattern le nombre de # et remplace par l'element selectionné (2 premier #) quand il y en a deja 3..
s/\(\(.[^#]*\)\{3\}\).*/\1/
;-)
s/\(\(.[^#]*\)\{3\}\).*/\1/
;-)
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
6 janv. 2010 à 14:58
6 janv. 2010 à 14:58
En fait elle ne compte pas exactement. Elle recherche une expression régulière définit comme suit :
.[^#]*
Une suite de caractères quelconques excepté le caractère dièse (#)
(...)\{3\}
et ceci 3 fois
.*
suivie d'une suite de caractères quelconques jusqu'à la fin de la ligne
On aurait pu l'écrire comme ça aussi (c'est d'ailleurs comme ça que je l'ai testé en 1er) :
PS. Merci lami20j ;-))
.[^#]*
Une suite de caractères quelconques excepté le caractère dièse (#)
(...)\{3\}
et ceci 3 fois
.*
suivie d'une suite de caractères quelconques jusqu'à la fin de la ligne
On aurait pu l'écrire comme ça aussi (c'est d'ailleurs comme ça que je l'ai testé en 1er) :
s/\(.[^#]*\)\(.[^#]*\)\(.[^#]*\).*/\1\2\3/
PS. Merci lami20j ;-))
Salut,
Je n'ai pas le niveau de Jipicy en sed.
Pour comprendre une regex il faut la lire caractère par caractère
P.S. La question n'a rien à avoir avec le message initial. Vaut mieux de créer un nouveau thread pour un nouveau problème.
Je n'ai pas le niveau de Jipicy en sed.
Pour comprendre une regex il faut la lire caractère par caractère
s - substitute mais tu le sais déjà ;-) / - séparateur mais tu le sais déjà ;-) \( - DEBUT 1ère capture \( - DEBUT 2ème capture, mais dans ce cas son rôle et plutôt de grouper pour appliquer un quantifiqateur . - n'importe quel caractère sauf \n [^#]* - tout caractère sauf # zéro, une ou n'importe combien des fois \) - FIN 2ème capture (groupement) \{3\} - 3 foit seulement le groupement \) - FIN 1ère capture .* - n'importe quel caractère zéro,une ou n'importe combien des fois /\1/ - on remplace avec ce qui capture la 1ère (on compte toujours en parant de gauche)
P.S. La question n'a rien à avoir avec le message initial. Vaut mieux de créer un nouveau thread pour un nouveau problème.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
6 janv. 2010 à 15:04
6 janv. 2010 à 15:04
Salut,
Je n'ai pas le niveau en sed.
Ça c'est toi qui le dit. Avec tes connaissances en Perl et autres, y'a pas de souci...
Par contre en regex t'es loin devant nous tous ici ;-))
Je n'ai pas le niveau en sed.
Ça c'est toi qui le dit. Avec tes connaissances en Perl et autres, y'a pas de souci...
Par contre en regex t'es loin devant nous tous ici ;-))
lami20j
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
6 janv. 2010 à 17:36
6 janv. 2010 à 17:36
Re,
Par contre en regex t'es loin devant nous tous ici ;-))
C'est gentil, mais je pense plutôt que le fait de penser chacun d'entre nous (quand je dis nous c'est pas que toi est moi) à des solutions, ça nous permets d'apprendre toujours.
On ne voit pas tous les choses de la même façon et ça c'est très intéressant est instructif en même temps.
Par contre en regex t'es loin devant nous tous ici ;-))
C'est gentil, mais je pense plutôt que le fait de penser chacun d'entre nous (quand je dis nous c'est pas que toi est moi) à des solutions, ça nous permets d'apprendre toujours.
On ne voit pas tous les choses de la même façon et ça c'est très intéressant est instructif en même temps.
green day
Messages postés
26371
Date d'inscription
vendredi 30 septembre 2005
Statut
Modérateur, Contributeur sécurité
Dernière intervention
27 décembre 2019
2 162
>
lami20j
6 janv. 2010 à 17:38
6 janv. 2010 à 17:38
Salutation ;-)
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
>
lami20j
6 janv. 2010 à 17:39
6 janv. 2010 à 17:39
+1 pour tout ;-))
Dans la vie on est toujours pauvre de savoir.
Dans la vie on est toujours pauvre de savoir.
5 janv. 2010 à 20:08
peux tu m'expliquer un peu ta methode pour que je progresse en SED;-)
Merci
cette methode fonctionne si j'ai des lignes sans X-MailidCpg: ??