Une nouvelle fois parmi vous pour vous soumettre mon problème.
La raison :
Lorsque je passe les mails reçu d'une mailing-list vers mon serveur de
news local, j'ai régulièrement des erreurs de mailpost concernant un
nombre trop élevé de headers.
C'est en général à cause d'un nombre de X-Received trop important, et
surtout, découpé.
Et comme je n'ai jamais trouvé comme paramétrer pour qu'il en accepte
plus de 101 (headers), j'ai pensé faire un script bash qui me corrige ça.
Ça se présente sous la forme :
X-Received: ...
(espace ou tabulation)suite ligne
...
X-Received: ...
(espace ou tabulation)suite ligne
...
X-Received: ...
(espace ou tabulation)suite ligne
...
De plus, il peut y avoir d'autres headers entre ces X-Received
J'avais pensé, au préalable, remplacer le
'^(X-Received[^n]*)\n[esptab][esptab]*' par '\1 '
(esptab = Espace + Tabulation)
pour avoir tout sur un X-Received sur une ligne, puis à ne garder que les
3 premiers et 3 derniers (par exemple)
J'ai donc fait un
sed ':1;N;s/\(X-Received:[^\n]*\)\n[ \t][ \t]*/\1 /;t1'
mais il ne me traite pas toutes les lignes concernées...
Mais évidemment, tout ça c'est la théorie, et je ne parviens à rien de
concluant.
Bien que ne maîtrisant pas sed, je préfère encore une solution y
faisant appel, plutôt qu'une solution perl car avec perl, je serai bien
incapable de l'adapter ensuite.
Ceci dit, je suis tout à fait ouvert à n'importe quelle autre solution,
et c'est pour ça que j'ai détaillé la raison de ce script.
Le vendredi 14 mai 2004 à 17:48 GMT, Christophe PEREZ écrivait sur fr.comp.os.unix :
Lorsque je passe les mails reçu d'une mailing-list vers mon serveur de news local, j'ai régulièrement des erreurs de mailpost concernant un nombre trop élevé de headers. C'est en général à cause d'un nombre de X-Received trop important, et surtout, découpé.
Ceci dit, je suis tout à fait ouvert à n'importe quelle autre solution, et c'est pour ça que j'ai détaillé la raison de ce script.
man formail ;o)
utiliser formail avant d'envoyer à mailpost avec l'option -I (avec un pipe).
@+ --
Passe que moi, au départ, j'avais fait informatique comme études, pas NT, et je voudrais revenir à mon métier premier. -+- BB in Guide du Linuxien pervers - Bien configurer son metier.
Le vendredi 14 mai 2004 à 17:48 GMT, Christophe PEREZ écrivait sur
fr.comp.os.unix :
Lorsque je passe les mails reçu d'une mailing-list vers mon serveur de
news local, j'ai régulièrement des erreurs de mailpost concernant un
nombre trop élevé de headers.
C'est en général à cause d'un nombre de X-Received trop important, et
surtout, découpé.
Ceci dit, je suis tout à fait ouvert à n'importe quelle autre solution,
et c'est pour ça que j'ai détaillé la raison de ce script.
man formail ;o)
utiliser formail avant d'envoyer à mailpost avec l'option -I (avec un
pipe).
@+
--
Passe que moi, au départ, j'avais fait informatique comme études, pas
NT, et je voudrais revenir à mon métier premier.
-+- BB in Guide du Linuxien pervers - Bien configurer son metier.
Le vendredi 14 mai 2004 à 17:48 GMT, Christophe PEREZ écrivait sur fr.comp.os.unix :
Lorsque je passe les mails reçu d'une mailing-list vers mon serveur de news local, j'ai régulièrement des erreurs de mailpost concernant un nombre trop élevé de headers. C'est en général à cause d'un nombre de X-Received trop important, et surtout, découpé.
Ceci dit, je suis tout à fait ouvert à n'importe quelle autre solution, et c'est pour ça que j'ai détaillé la raison de ce script.
man formail ;o)
utiliser formail avant d'envoyer à mailpost avec l'option -I (avec un pipe).
@+ --
Passe que moi, au départ, j'avais fait informatique comme études, pas NT, et je voudrais revenir à mon métier premier. -+- BB in Guide du Linuxien pervers - Bien configurer son metier.
Christophe PEREZ
Le Sat, 15 May 2004 05:55:28 +0000, Gérald Niel a écrit:
man formail ;o)
utiliser formail avant d'envoyer à mailpost avec l'option -I (avec un pipe).
C'est effectivement une solution. Non pas comme je l'ai comprise à la première lecture, mais en utilisant formail pour exclure les headers que je veux traiter, et réutiliser formail pour ensuite supprimer ceux de mon choix. Merci bien.
Ceci dit, je galère pour passer des paramètres à formail. Je récupère tous les headers à ajouter dans une variable, mais je suis incapable de les faire passer à formail avec le -A. en fait, il me faut : formail -A "ligne1_de_la_chaine" -A "ligne2_de_la_chaine" ... J'ai bien essayé de rajouter le -A en début chaque ligne, de remplacer le saut de ligne par un espace, mais quand je passe cette commande à formail, il me la refuse. Je suis bien conscient que c'est un truc tout bête de faire considérer -A et ".." comme des arguments séparés pour formail, mais j'ai beau chercher, je ne vois pas.
-- Christophe PEREZ Écrivez moi sans _faute !
Le Sat, 15 May 2004 05:55:28 +0000, Gérald Niel a écrit:
man formail ;o)
utiliser formail avant d'envoyer à mailpost avec l'option -I (avec un
pipe).
C'est effectivement une solution.
Non pas comme je l'ai comprise à la première lecture, mais en utilisant
formail pour exclure les headers que je veux traiter, et réutiliser
formail pour ensuite supprimer ceux de mon choix.
Merci bien.
Ceci dit, je galère pour passer des paramètres à formail.
Je récupère tous les headers à ajouter dans une variable, mais je suis
incapable de les faire passer à formail avec le -A.
en fait, il me faut :
formail -A "ligne1_de_la_chaine" -A "ligne2_de_la_chaine" ...
J'ai bien essayé de rajouter le -A en début chaque ligne, de remplacer
le saut de ligne par un espace, mais quand je passe cette commande à
formail, il me la refuse.
Je suis bien conscient que c'est un truc tout bête de faire considérer
-A et ".." comme des arguments séparés pour formail, mais j'ai beau
chercher, je ne vois pas.
Le Sat, 15 May 2004 05:55:28 +0000, Gérald Niel a écrit:
man formail ;o)
utiliser formail avant d'envoyer à mailpost avec l'option -I (avec un pipe).
C'est effectivement une solution. Non pas comme je l'ai comprise à la première lecture, mais en utilisant formail pour exclure les headers que je veux traiter, et réutiliser formail pour ensuite supprimer ceux de mon choix. Merci bien.
Ceci dit, je galère pour passer des paramètres à formail. Je récupère tous les headers à ajouter dans une variable, mais je suis incapable de les faire passer à formail avec le -A. en fait, il me faut : formail -A "ligne1_de_la_chaine" -A "ligne2_de_la_chaine" ... J'ai bien essayé de rajouter le -A en début chaque ligne, de remplacer le saut de ligne par un espace, mais quand je passe cette commande à formail, il me la refuse. Je suis bien conscient que c'est un truc tout bête de faire considérer -A et ".." comme des arguments séparés pour formail, mais j'ai beau chercher, je ne vois pas.
-- Christophe PEREZ Écrivez moi sans _faute !
DominiX
"Gérald Niel" a écrit dans le message de news:
Le vendredi 14 mai 2004 à 17:48 GMT, Christophe PEREZ écrivait sur fr.comp.os.unix :
Lorsque je passe les mails reçu d'une mailing-list vers mon serveur de news local, j'ai régulièrement des erreurs de mailpost concernant un nombre trop élevé de headers. C'est en général à cause d'un nombre de X-Received trop important, et surtout, découpé.
Ceci dit, je suis tout à fait ouvert à n'importe quelle autre solution, et c'est pour ça que j'ai détaillé la raison de ce script.
man formail ;o)
j'ai pas suivit depuis le debut mais si ca peut aider, je fais ca avec une ligne(+) perl
# affiche un mail sans les entete X-* perl -n00l12e ' if (1..1){@h=split/n(?=[w-]+: )/mg}else{$b.=$_}; END{for(@h){print if !/^X-/};print "n".$b}'
-- dominix
"Gérald Niel" <gniel@alussinan.org> a écrit dans le message de
news:slrncabc6g.2hb.gniel@tux.gegeweb.org...
Le vendredi 14 mai 2004 à 17:48 GMT, Christophe PEREZ écrivait sur
fr.comp.os.unix :
Lorsque je passe les mails reçu d'une mailing-list vers mon serveur de
news local, j'ai régulièrement des erreurs de mailpost concernant un
nombre trop élevé de headers.
C'est en général à cause d'un nombre de X-Received trop important, et
surtout, découpé.
Ceci dit, je suis tout à fait ouvert à n'importe quelle autre solution,
et c'est pour ça que j'ai détaillé la raison de ce script.
man formail ;o)
j'ai pas suivit depuis le debut mais si ca peut aider, je fais ca avec
une ligne(+) perl
# affiche un mail sans les entete X-*
perl -n00l12e '
if (1..1){@h=split/n(?=[w-]+: )/mg}else{$b.=$_};
END{for(@h){print if !/^X-/};print "n".$b}'
Le vendredi 14 mai 2004 à 17:48 GMT, Christophe PEREZ écrivait sur fr.comp.os.unix :
Lorsque je passe les mails reçu d'une mailing-list vers mon serveur de news local, j'ai régulièrement des erreurs de mailpost concernant un nombre trop élevé de headers. C'est en général à cause d'un nombre de X-Received trop important, et surtout, découpé.
Ceci dit, je suis tout à fait ouvert à n'importe quelle autre solution, et c'est pour ça que j'ai détaillé la raison de ce script.
man formail ;o)
j'ai pas suivit depuis le debut mais si ca peut aider, je fais ca avec une ligne(+) perl
# affiche un mail sans les entete X-* perl -n00l12e ' if (1..1){@h=split/n(?=[w-]+: )/mg}else{$b.=$_}; END{for(@h){print if !/^X-/};print "n".$b}'
-- dominix
Christophe PEREZ
Le Sat, 15 May 2004 17:21:53 -1000, DominiX a écrit:
j'ai pas suivit depuis le debut
Y avait pas grand chose à suivre ;-)
mais si ca peut aider, je fais ca avec une ligne(+) perl
# affiche un mail sans les entete X-* perl -n00l12e ' if (1..1){@h=split/n(?=[w-]+: )/mg}else{$b.=$_}; END{for(@h){print if !/^X-/};print "n".$b}'
Merci mais c'est exactement le genre de choses qu'il ne me faut pas puisque je serai incapable de la comprendre/modifier, et comme elle ne correspond pas à mon besoin strict, je ne peux rien en faire ;-)
Mais merci quand même.
-- Christophe PEREZ Écrivez moi sans _faute !
Le Sat, 15 May 2004 17:21:53 -1000, DominiX a écrit:
j'ai pas suivit depuis le debut
Y avait pas grand chose à suivre ;-)
mais si ca peut aider, je fais ca avec une ligne(+) perl
# affiche un mail sans les entete X-*
perl -n00l12e '
if (1..1){@h=split/n(?=[w-]+: )/mg}else{$b.=$_};
END{for(@h){print if !/^X-/};print "n".$b}'
Merci mais c'est exactement le genre de choses qu'il ne me faut pas
puisque je serai incapable de la comprendre/modifier, et comme elle ne
correspond pas à mon besoin strict, je ne peux rien en faire ;-)
Le Sat, 15 May 2004 17:21:53 -1000, DominiX a écrit:
j'ai pas suivit depuis le debut
Y avait pas grand chose à suivre ;-)
mais si ca peut aider, je fais ca avec une ligne(+) perl
# affiche un mail sans les entete X-* perl -n00l12e ' if (1..1){@h=split/n(?=[w-]+: )/mg}else{$b.=$_}; END{for(@h){print if !/^X-/};print "n".$b}'
Merci mais c'est exactement le genre de choses qu'il ne me faut pas puisque je serai incapable de la comprendre/modifier, et comme elle ne correspond pas à mon besoin strict, je ne peux rien en faire ;-)
Mais merci quand même.
-- Christophe PEREZ Écrivez moi sans _faute !
DominiX
"Christophe PEREZ" a écrit dans le message de news:
Le Sat, 15 May 2004 17:21:53 -1000, DominiX a écrit:
j'ai pas suivit depuis le debut
Y avait pas grand chose à suivre ;-)
mais si ca peut aider, je fais ca avec une ligne(+) perl
# affiche un mail sans les entete X-* perl -n00l12e ' if (1..1){@h=split/n(?=[w-]+: )/mg}else{$b.=$_}; END{for(@h){print if !/^X-/};print "n".$b}'
Merci mais c'est exactement le genre de choses qu'il ne me faut pas puisque je serai incapable de la comprendre/modifier, et comme elle ne correspond pas à mon besoin strict, je ne peux rien en faire ;-)
pas bien sorcier pourtant, voyons voir.
# perl -MOÞparse -n00l12e ' if (1..1){@h=split/n(?=[w-]+: )/mg}else{$b.=$_}; END{for(@h){print if !/^X-/};print "n".$b}' |grep . -n
1:BEGIN { $/ = ""; $ = "n"; } 2:LINE: while (defined($_ = <ARGV>)) { 3: chomp $_; 4: if (1 .. 1) { 5: @h = split(/n(?=[w-]+: )/gm, $_, 0); 6: } 7: else { 8: $b .= $_; 9: } 10: sub END { 11: foreach $_ (@h) { 12: print $_ if not /^X-/; 13: } 14: print "n" . $b; 15: } 16: ; 17:}
cette presentation est elle plus claire ? pour aider a comprendre @h est un tableau des headers $b est la variable body (du mail) -n00 met perl en paragraph mode et la ligne 4 if (1 .. 1) ne prend donc en compte que le premier paragraph (les entetes quoi) et met dans le tableau @h avec ce qui est consideré comme séparateur par la regex /n(?=[w-]+: )/gm _sans le supprimer_ autrement dit un n suivit d'un certain nombre de lettre et tiret suivit de ":" ... tient ca ressemble au delimiteur d'entete et tout le reste dans $b
a la fin du script (10) on imprime depuis le tableau @h les entetes choisit (ligne 12); ici "not /^X-/" (cad le delimiteur ne commence pas par X- ), mais tu peux mettre ce que tu veux ... ... suivit du body du mail (ligne 14)
et c'est tout ! je trouve que c'est tres maintenable.
Mais merci quand même.
pas de quoi -- dominix
"Christophe PEREZ" <christophe.perez_faute@novazur.com> a écrit dans le
message de news:pan.2004.05.16.04.03.02.389850@novazur.fr...
Le Sat, 15 May 2004 17:21:53 -1000, DominiX a écrit:
j'ai pas suivit depuis le debut
Y avait pas grand chose à suivre ;-)
mais si ca peut aider, je fais ca avec une ligne(+) perl
# affiche un mail sans les entete X-*
perl -n00l12e '
if (1..1){@h=split/n(?=[w-]+: )/mg}else{$b.=$_};
END{for(@h){print if !/^X-/};print "n".$b}'
Merci mais c'est exactement le genre de choses qu'il ne me faut pas
puisque je serai incapable de la comprendre/modifier, et comme elle ne
correspond pas à mon besoin strict, je ne peux rien en faire ;-)
pas bien sorcier pourtant, voyons voir.
dominix@pastis # perl -MOÞparse -n00l12e '
if (1..1){@h=split/n(?=[w-]+: )/mg}else{$b.=$_};
END{for(@h){print if !/^X-/};print "n".$b}' |grep . -n
1:BEGIN { $/ = ""; $ = "n"; }
2:LINE: while (defined($_ = <ARGV>)) {
3: chomp $_;
4: if (1 .. 1) {
5: @h = split(/n(?=[w-]+: )/gm, $_, 0);
6: }
7: else {
8: $b .= $_;
9: }
10: sub END {
11: foreach $_ (@h) {
12: print $_ if not /^X-/;
13: }
14: print "n" . $b;
15: }
16: ;
17:}
cette presentation est elle plus claire ?
pour aider a comprendre @h est un tableau des headers $b est la
variable body (du mail) -n00 met perl en paragraph mode et la
ligne 4 if (1 .. 1) ne prend donc en compte que le premier paragraph
(les entetes quoi) et met dans le tableau @h avec ce qui est consideré
comme séparateur par la regex /n(?=[w-]+: )/gm _sans le supprimer_
autrement dit
un n suivit d'un certain nombre de lettre et tiret suivit de ":"
... tient ca ressemble au delimiteur d'entete
et tout le reste dans $b
a la fin du script (10) on imprime depuis le tableau @h les entetes
choisit (ligne 12); ici "not /^X-/"
(cad le delimiteur ne commence pas par X- ), mais tu peux mettre ce
que tu veux ...
... suivit du body du mail (ligne 14)
et c'est tout !
je trouve que c'est tres maintenable.
"Christophe PEREZ" a écrit dans le message de news:
Le Sat, 15 May 2004 17:21:53 -1000, DominiX a écrit:
j'ai pas suivit depuis le debut
Y avait pas grand chose à suivre ;-)
mais si ca peut aider, je fais ca avec une ligne(+) perl
# affiche un mail sans les entete X-* perl -n00l12e ' if (1..1){@h=split/n(?=[w-]+: )/mg}else{$b.=$_}; END{for(@h){print if !/^X-/};print "n".$b}'
Merci mais c'est exactement le genre de choses qu'il ne me faut pas puisque je serai incapable de la comprendre/modifier, et comme elle ne correspond pas à mon besoin strict, je ne peux rien en faire ;-)
pas bien sorcier pourtant, voyons voir.
# perl -MOÞparse -n00l12e ' if (1..1){@h=split/n(?=[w-]+: )/mg}else{$b.=$_}; END{for(@h){print if !/^X-/};print "n".$b}' |grep . -n
1:BEGIN { $/ = ""; $ = "n"; } 2:LINE: while (defined($_ = <ARGV>)) { 3: chomp $_; 4: if (1 .. 1) { 5: @h = split(/n(?=[w-]+: )/gm, $_, 0); 6: } 7: else { 8: $b .= $_; 9: } 10: sub END { 11: foreach $_ (@h) { 12: print $_ if not /^X-/; 13: } 14: print "n" . $b; 15: } 16: ; 17:}
cette presentation est elle plus claire ? pour aider a comprendre @h est un tableau des headers $b est la variable body (du mail) -n00 met perl en paragraph mode et la ligne 4 if (1 .. 1) ne prend donc en compte que le premier paragraph (les entetes quoi) et met dans le tableau @h avec ce qui est consideré comme séparateur par la regex /n(?=[w-]+: )/gm _sans le supprimer_ autrement dit un n suivit d'un certain nombre de lettre et tiret suivit de ":" ... tient ca ressemble au delimiteur d'entete et tout le reste dans $b
a la fin du script (10) on imprime depuis le tableau @h les entetes choisit (ligne 12); ici "not /^X-/" (cad le delimiteur ne commence pas par X- ), mais tu peux mettre ce que tu veux ... ... suivit du body du mail (ligne 14)
et c'est tout ! je trouve que c'est tres maintenable.
Mais merci quand même.
pas de quoi -- dominix
Christophe PEREZ
Le Sun, 16 May 2004 19:45:00 -1000, DominiX a écrit:
cette presentation est elle plus claire ?
Pour sûr ! ;-)
(cad le delimiteur ne commence pas par X- ), mais tu peux mettre ce que tu veux ...
C'est très sympa de te donner tant de mal, mais comme mon besoin n'est pas juste de supprimer des entêtes connues à l'avance mais de garder les 3 premiers et 3 derniers received si le nombre de received est supérieur à 6 (complètement arbitraire), je ne saurai pas faire tout ça en perl.
je trouve que c'est tres maintenable.
Sans doute, sans doute, mais faudrait que je me mette au perl pour ça, et franchement, ni trop envie ni trop le temps en ce moment. Dommage que je ne sache pas passer cette f***ue commande en arguments séparés à formail puisque j'ai déjà le traitement préalable fait.
-- Christophe PEREZ Écrivez moi sans _faute !
Le Sun, 16 May 2004 19:45:00 -1000, DominiX a écrit:
cette presentation est elle plus claire ?
Pour sûr ! ;-)
(cad le delimiteur ne commence pas par X- ), mais tu peux mettre ce
que tu veux ...
C'est très sympa de te donner tant de mal, mais comme mon besoin n'est
pas juste de supprimer des entêtes connues à l'avance mais de garder les
3 premiers et 3 derniers received si le nombre de received est supérieur
à 6 (complètement arbitraire), je ne saurai pas faire tout ça en perl.
je trouve que c'est tres maintenable.
Sans doute, sans doute, mais faudrait que je me mette au perl pour ça, et
franchement, ni trop envie ni trop le temps en ce moment.
Dommage que je ne sache pas passer cette f***ue commande en arguments
séparés à formail puisque j'ai déjà le traitement préalable fait.
Le Sun, 16 May 2004 19:45:00 -1000, DominiX a écrit:
cette presentation est elle plus claire ?
Pour sûr ! ;-)
(cad le delimiteur ne commence pas par X- ), mais tu peux mettre ce que tu veux ...
C'est très sympa de te donner tant de mal, mais comme mon besoin n'est pas juste de supprimer des entêtes connues à l'avance mais de garder les 3 premiers et 3 derniers received si le nombre de received est supérieur à 6 (complètement arbitraire), je ne saurai pas faire tout ça en perl.
je trouve que c'est tres maintenable.
Sans doute, sans doute, mais faudrait que je me mette au perl pour ça, et franchement, ni trop envie ni trop le temps en ce moment. Dommage que je ne sache pas passer cette f***ue commande en arguments séparés à formail puisque j'ai déjà le traitement préalable fait.
-- Christophe PEREZ Écrivez moi sans _faute !
Jacques L'helgoualc'h
Christophe PEREZ a dit :
Le Sun, 16 May 2004 19:45:00 -1000, DominiX a écrit:
[desobfuscated perl] C'est très sympa de te donner tant de mal, mais comme mon besoin n'est
pas juste de supprimer des entêtes connues à l'avance mais de garder les 3 premiers et 3 derniers received si le nombre de received est supérieur à 6 (complètement arbitraire), je ne saurai pas faire tout ça en perl.
#!/bin/sed -nrf :a # avale tous les en-têtes (au moins un :) et la ligne vide N;/n$/!ba :b # teste s'il y a trop de (X-)Received:, 7 = 3 + 1 + 3 s/^(X-)Received:/&/M7;Tf # si oui, supprime le premier superflu, 4 = 3 + 1 s/^(X-)Received:[^n]*n([ t][^n]*n)*//M4 # ... et remonte vérifier le compte tb :f # fin p;q
-- Jacques L'helgoualc'h
Christophe PEREZ <christophe.perez_faute@novazur.com> a dit :
Le Sun, 16 May 2004 19:45:00 -1000, DominiX a écrit:
[desobfuscated perl]
C'est très sympa de te donner tant de mal, mais comme mon besoin n'est
pas juste de supprimer des entêtes connues à l'avance mais de garder les
3 premiers et 3 derniers received si le nombre de received est supérieur
à 6 (complètement arbitraire), je ne saurai pas faire tout ça en perl.
#!/bin/sed -nrf
:a
# avale tous les en-têtes (au moins un :) et la ligne vide
N;/n$/!ba
:b
# teste s'il y a trop de (X-)Received:, 7 = 3 + 1 + 3
s/^(X-)Received:/&/M7;Tf
# si oui, supprime le premier superflu, 4 = 3 + 1
s/^(X-)Received:[^n]*n([ t][^n]*n)*//M4
# ... et remonte vérifier le compte
tb
:f
# fin
p;q
Le Sun, 16 May 2004 19:45:00 -1000, DominiX a écrit:
[desobfuscated perl] C'est très sympa de te donner tant de mal, mais comme mon besoin n'est
pas juste de supprimer des entêtes connues à l'avance mais de garder les 3 premiers et 3 derniers received si le nombre de received est supérieur à 6 (complètement arbitraire), je ne saurai pas faire tout ça en perl.
#!/bin/sed -nrf :a # avale tous les en-têtes (au moins un :) et la ligne vide N;/n$/!ba :b # teste s'il y a trop de (X-)Received:, 7 = 3 + 1 + 3 s/^(X-)Received:/&/M7;Tf # si oui, supprime le premier superflu, 4 = 3 + 1 s/^(X-)Received:[^n]*n([ t][^n]*n)*//M4 # ... et remonte vérifier le compte tb :f # fin p;q
-- Jacques L'helgoualc'h
Christophe PEREZ
Le Mon, 17 May 2004 15:03:57 +0200, Jacques L'helgoualc'h a écrit:
C'est impeccable tout ça, même si je suis très loin de le comprendre...
même pas la peine de tenter de m'expliquer ;-)
Ça peut se mettre en une ligne de commande ou il me faut impérativement
en faire un script appelé par le mien ?
En tout cas, merci beaucoup.
PS : t'aurais pas la même chose pour réduire le nombre d'occurrences
dans le champ références ?
Ex:
References: <truc1@a.tld>
<truc2@a.tld>
<truc3@a.tld>
...
<trucn@a.tld>
réduit avec les 3 premières et 3 dernières références ?
C'est impeccable tout ça, même si je suis très loin de le comprendre... même pas la peine de tenter de m'expliquer ;-)
Ça peut se mettre en une ligne de commande ou il me faut impérativement en faire un script appelé par le mien ?
En tout cas, merci beaucoup.
PS : t'aurais pas la même chose pour réduire le nombre d'occurrences dans le champ références ? Ex: References:
...
réduit avec les 3 premières et 3 dernières références ?
-- Christophe PEREZ Écrivez moi sans _faute !
Jacques L'helgoualc'h
Christophe PEREZ a dit :
Le Mon, 17 May 2004 15:03:57 +0200, Jacques L'helgoualc'h a écrit: [...]
C'est impeccable tout ça, même si je suis très loin de le comprendre... même pas la peine de tenter de m'expliquer ;-)
Heu, désolé, il y a même un bug :/, j'avais testé avec autre chose, il manque le point d'interrogation de ^(X-)?Received: si tu veux traiter les deux ensemble ...
Sinon, c'est juste un truc tout bête avec du GOTO.
Ça peut se mettre en une ligne de commande ou il me faut impérativement en faire un script appelé par le mien ?
En ligne de commande, sed -nr 'le script', par exemple dans un pipe sur les en-têtes dans un procmailrc. Tu peux virer les commentaires, et aussi remplacer les sauts de ligne par des points-virgules, ça fait un chouette one-liner imbittable.
Sinon, sed -nrf fichier_script, ou chmod +x fichier_script. Si tu filtres le corps en même temps, supprime le « ;q » final, et essaie plutôt avec un « 1{le script sans ;q} ». Ensuite, tu peux attaquer une mbox avec « /^From /{le script sans ;q} » (sans garantie, hein).
En tout cas, merci beaucoup.
de rien, il suffit de lire un peu http://sed.sf.net/ ;)
PS : t'aurais pas la même chose pour réduire le nombre d'occurrences dans le champ références ? Ex: References:
...
réduit avec les 3 premières et 3 dernières références ?
En même temps que le précédent, ou à part ? C'est possible au début de la seconde boucle, tous les en-têtes sont là ... -- Jacques L'helgoualc'h
Christophe PEREZ <christophe.perez_faute@novazur.com> a dit :
Le Mon, 17 May 2004 15:03:57 +0200, Jacques L'helgoualc'h a écrit:
[...]
C'est impeccable tout ça, même si je suis très loin de le comprendre...
même pas la peine de tenter de m'expliquer ;-)
Heu, désolé, il y a même un bug :/, j'avais testé avec autre
chose, il manque le point d'interrogation de ^(X-)?Received: si
tu veux traiter les deux ensemble ...
Sinon, c'est juste un truc tout bête avec du GOTO.
Ça peut se mettre en une ligne de commande ou il me faut impérativement
en faire un script appelé par le mien ?
En ligne de commande, sed -nr 'le script', par exemple dans un
pipe sur les en-têtes dans un procmailrc. Tu peux virer les
commentaires, et aussi remplacer les sauts de ligne par des
points-virgules, ça fait un chouette one-liner imbittable.
Sinon, sed -nrf fichier_script, ou chmod +x fichier_script. Si
tu filtres le corps en même temps, supprime le « ;q » final, et
essaie plutôt avec un « 1{le script sans ;q} ». Ensuite, tu
peux attaquer une mbox avec « /^From /{le script sans ;q} »
(sans garantie, hein).
En tout cas, merci beaucoup.
de rien, il suffit de lire un peu http://sed.sf.net/ ;)
PS : t'aurais pas la même chose pour réduire le nombre d'occurrences
dans le champ références ?
Ex:
References: <truc1@a.tld>
<truc2@a.tld>
<truc3@a.tld>
...
<trucn@a.tld>
réduit avec les 3 premières et 3 dernières références ?
En même temps que le précédent, ou à part ? C'est possible au
début de la seconde boucle, tous les en-têtes sont là ...
--
Jacques L'helgoualc'h
Le Mon, 17 May 2004 15:03:57 +0200, Jacques L'helgoualc'h a écrit: [...]
C'est impeccable tout ça, même si je suis très loin de le comprendre... même pas la peine de tenter de m'expliquer ;-)
Heu, désolé, il y a même un bug :/, j'avais testé avec autre chose, il manque le point d'interrogation de ^(X-)?Received: si tu veux traiter les deux ensemble ...
Sinon, c'est juste un truc tout bête avec du GOTO.
Ça peut se mettre en une ligne de commande ou il me faut impérativement en faire un script appelé par le mien ?
En ligne de commande, sed -nr 'le script', par exemple dans un pipe sur les en-têtes dans un procmailrc. Tu peux virer les commentaires, et aussi remplacer les sauts de ligne par des points-virgules, ça fait un chouette one-liner imbittable.
Sinon, sed -nrf fichier_script, ou chmod +x fichier_script. Si tu filtres le corps en même temps, supprime le « ;q » final, et essaie plutôt avec un « 1{le script sans ;q} ». Ensuite, tu peux attaquer une mbox avec « /^From /{le script sans ;q} » (sans garantie, hein).
En tout cas, merci beaucoup.
de rien, il suffit de lire un peu http://sed.sf.net/ ;)
PS : t'aurais pas la même chose pour réduire le nombre d'occurrences dans le champ références ? Ex: References:
...
réduit avec les 3 premières et 3 dernières références ?
En même temps que le précédent, ou à part ? C'est possible au début de la seconde boucle, tous les en-têtes sont là ... -- Jacques L'helgoualc'h
Jacques L'helgoualc'h
Christophe PEREZ a dit :
Le Sun, 16 May 2004 19:45:00 -1000, DominiX a écrit:
[desobfuscated perl] C'est très sympa de te donner tant de mal, mais comme mon besoin n'est
pas juste de supprimer des entêtes connues à l'avance mais de garder les 3 premiers et 3 derniers received si le nombre de received est supérieur à 6 (complètement arbitraire), je ne saurai pas faire tout ça en perl.
#!/bin/sed -nrf :a # avale tous les en-têtes (au moins un :) et la ligne vide N;/n$/!ba :b # teste s'il y a trop de (X-)Received:, 7 = 3 + 1 + 3 s/^(X-)?Received:/&/M7;Tf # si oui, supprime le premier superflu, 4 = 3 + 1 s/^(X-)?Received:[^n]*n([ t][^n]*n)*//M4 # ... et remonte vérifier le compte tb :f # fin p;q
-- Jacques L'helgoualc'h
Christophe PEREZ <christophe.perez_faute@novazur.com> a dit :
Le Sun, 16 May 2004 19:45:00 -1000, DominiX a écrit:
[desobfuscated perl]
C'est très sympa de te donner tant de mal, mais comme mon besoin n'est
pas juste de supprimer des entêtes connues à l'avance mais de garder les
3 premiers et 3 derniers received si le nombre de received est supérieur
à 6 (complètement arbitraire), je ne saurai pas faire tout ça en perl.
#!/bin/sed -nrf
:a
# avale tous les en-têtes (au moins un :) et la ligne vide
N;/n$/!ba
:b
# teste s'il y a trop de (X-)Received:, 7 = 3 + 1 + 3
s/^(X-)?Received:/&/M7;Tf
# si oui, supprime le premier superflu, 4 = 3 + 1
s/^(X-)?Received:[^n]*n([ t][^n]*n)*//M4
# ... et remonte vérifier le compte
tb
:f
# fin
p;q
Le Sun, 16 May 2004 19:45:00 -1000, DominiX a écrit:
[desobfuscated perl] C'est très sympa de te donner tant de mal, mais comme mon besoin n'est
pas juste de supprimer des entêtes connues à l'avance mais de garder les 3 premiers et 3 derniers received si le nombre de received est supérieur à 6 (complètement arbitraire), je ne saurai pas faire tout ça en perl.
#!/bin/sed -nrf :a # avale tous les en-têtes (au moins un :) et la ligne vide N;/n$/!ba :b # teste s'il y a trop de (X-)Received:, 7 = 3 + 1 + 3 s/^(X-)?Received:/&/M7;Tf # si oui, supprime le premier superflu, 4 = 3 + 1 s/^(X-)?Received:[^n]*n([ t][^n]*n)*//M4 # ... et remonte vérifier le compte tb :f # fin p;q