Regex+postfix+header_checks
Résolu
jonigood
Messages postés
476
Date d'inscription
Statut
Membre
Dernière intervention
-
jonigood Messages postés 476 Date d'inscription Statut Membre Dernière intervention -
jonigood Messages postés 476 Date d'inscription Statut Membre Dernière intervention -
salut a tous et merci de me lire
j'ai besoins d'aide pour la création d'un régex
En analysant les mails parti depuis mon client outlook (pc at home) en passant par mon serveur postfix (SMTP TLS sur un serveur VPS) je constate ceci :
que je veux transformer en ceci :
les mots a changer sont donc :
par
et
par
dans mon header_checks j'ai déjà essayez plusieurs combinaisons de regex sans succès, j'ai réussi facilement a faire ignorer complétement la ligne et pas a la remplacer correctement.
quelqu'un qui si connait en regex peut-il m'aidez a résoudre mon problème ?
Merci d'avance a tous.
Cordialement
jonigood
j'ai besoins d'aide pour la création d'un régex
En analysant les mails parti depuis mon client outlook (pc at home) en passant par mon serveur postfix (SMTP TLS sur un serveur VPS) je constate ceci :
from 192.168.1.2 (unknown [xx.xxx.xx.xx]) (Authenticated sender: xxxxxx) by mail.MON-SERVEUR-SMTP.com (Postfix) with ESMTPA id 1E-65424927097 for <xxx@xxx.com>; Sun, 20 Mar 2011 02:18:43 +0000 (GMT)
que je veux transformer en ceci :
from mail.MON-SERVEUR-SMTP.com (localhost.localdomain [127.0.0.1]) by mail.MON-SERVEUR-SMTP.com (Postfix) with SMTP id E67A58929974 for <xxx@xxx.com>; Sun, 20 Mar 2011 00:18:41 +0000 (GMT)
les mots a changer sont donc :
from 192.168.1.2 (unknown [xx.xxx.xx.xx]) (Authenticated sender: xxxxxx)
par
from mail.MON-SERVEUR-SMTP.com (localhost.localdomain [127.0.0.1])
et
with ESMTPA
par
with SMTP
dans mon header_checks j'ai déjà essayez plusieurs combinaisons de regex sans succès, j'ai réussi facilement a faire ignorer complétement la ligne et pas a la remplacer correctement.
quelqu'un qui si connait en regex peut-il m'aidez a résoudre mon problème ?
Merci d'avance a tous.
Cordialement
jonigood
14 réponses
Salut,
Une piste...
;-))
Une piste...
$ cat plop from 192.168.1.2 (unknown [xx.xxx.xx.xx]) (Authenticated sender: xxxxxx) by mail.MON-SERVEUR-SMTP.com (Postfix) with ESMTPA id 1E-65424927097 for <xxx@xxx.com>; Sun, 20 Mar 2011 02:18:43 +0000 (GMT) $ sed 's/^from 192\.168\.1\.2.*sender:[^)]*)/from mail.MON-SERVEUR-SMTP.com (localhost.localdomain [127.0.0.1])/;s/ESMTPA/SMPT/' plop from mail.MON-SERVEUR-SMTP.com (localhost.localdomain [127.0.0.1]) by mail.MON-SERVEUR-SMTP.com (Postfix) with SMPT id 1E-65424927097 for <xxx@xxx.com>; Sun, 20 Mar 2011 02:18:43 +0000 (GMT) $
;-))
salut zipe31 et merci de ton intervention,
je ne pense pas que c'est écrit sous la bonne forme, pour exemple voici comment j'arrive a remplacer TOUTE LA LIGNE sans exception (ce n'est donc pas le résultat souhaité) :
ceci remplace toute la ligne par Received from mail.MON-SERVEUR-SMTP.com
de mon coté voila ou j'en suis :
et ca ne fonctionne pas, il doit y avoir une erreur dans ma ligne.
une idée ?
je ne pense pas que c'est écrit sous la bonne forme, pour exemple voici comment j'arrive a remplacer TOUTE LA LIGNE sans exception (ce n'est donc pas le résultat souhaité) :
/^Received:.*\[192\.168\.0\.[0-9]/ REPLACE Received from mail.MON-SERVEUR-SMTP.com
ceci remplace toute la ligne par Received from mail.MON-SERVEUR-SMTP.com
de mon coté voila ou j'en suis :
/^Received:.*\[192\.168\.0\.[0-9]\(Authenticated sender:.*\)\s+(.*by mail\.MON\-SERVEUR\-SMTP\.com[^\n]+ESMTPSA .*)$/im REPLACE from mail.MON-SERVEUR-SMTP.com (localhost.localdomain [127.0.0.1]) by mail.MON-SERVEUR-SMTP.com (Postfix) with SMPT
et ca ne fonctionne pas, il doit y avoir une erreur dans ma ligne.
une idée ?
Salut à vous deux,
langage pcre
Tu ne fais pas ça en php, par hasard?
langage pcre
Tu ne fais pas ça en php, par hasard?
je met sa dans mon fichier /etc/postfix/header_checks
Ok, mais tu mets avec quoi?
Script shell, script perl, script php?
Il faut savoir quelle application utilise les regex.
pcre ne désigne qu'un type des regex compatible avec perl, mais si tu ne fais pas en perl alors tu fais avec quoi?
Montre tes tests?
Ok, mais tu mets avec quoi?
Script shell, script perl, script php?
Il faut savoir quelle application utilise les regex.
pcre ne désigne qu'un type des regex compatible avec perl, mais si tu ne fais pas en perl alors tu fais avec quoi?
Montre tes tests?
Re-
Jette un oeil à http://www.postfix.org/header_checks.5.html
Apparemment il suffit de construire une règle dans le fichier de conf avec les bonnes regex et la bonne syntaxe (REPLACE dans son cas)..
Jette un oeil à http://www.postfix.org/header_checks.5.html
Apparemment il suffit de construire une règle dans le fichier de conf avec les bonnes regex et la bonne syntaxe (REPLACE dans son cas)..
l'ami20j
désolé l'ami je suis pas encore calé en la matière pour te répondre correctement.
ce que je sais c'est que postfix doit utiliser cette regex pour filtré les mails sortants et donc REPLACE les mots définits.
sous putty j'ai créer ce fichier "/etc/postfix/header_checks" et j'écris la regex dedans...
zipe31
merci pour ce lien c'est exactement ça.
mon souci est pour construire cette règle, je n'y arrive pas, j'arrive a replacer la ligne entière avec :
qui détecte toutes lignes contenant 192.168.1.2 et la remplace par Received from mail.MON-SERVEUR-SMTP.com
je doit donc construire cette règle avec les bonnes regex pour ne pas remplacer toute la ligne....
Ok, mais tu mets avec quoi? Script shell, script perl, script php? Il faut savoir quelle application utilise les regex.
désolé l'ami je suis pas encore calé en la matière pour te répondre correctement.
ce que je sais c'est que postfix doit utiliser cette regex pour filtré les mails sortants et donc REPLACE les mots définits.
sous putty j'ai créer ce fichier "/etc/postfix/header_checks" et j'écris la regex dedans...
zipe31
merci pour ce lien c'est exactement ça.
mon souci est pour construire cette règle, je n'y arrive pas, j'arrive a replacer la ligne entière avec :
/^Received:.*\[192\.168\.0\.[0-9]/ REPLACE Received from mail.MON-SERVEUR-SMTP.com
qui détecte toutes lignes contenant 192.168.1.2 et la remplace par Received from mail.MON-SERVEUR-SMTP.com
je doit donc construire cette règle avec les bonnes regex pour ne pas remplacer toute la ligne....
Ok.
Mais tu ne donnes pas la ligne complète alors.
Dans ton premier message tu dis
from 192.168.1.2 (unknown [xx.xxx.xx.xx]) (Authenticated sender: xxxxxx) by mail.MON-SERVEUR-SMTP.com (Postfix) with ESMTPA id 1E-65424927097 for <xxx@xxx.com>; Sun, 20 Mar 2011 02:18:43 +0000 (GMT)
et puis tu cherche une ligne qui commence avec Received
Bref, ta regex ne va jamais fonctionner.
Il faudra que tu donnes le contenus correct des données en entrée.
Mais tu ne donnes pas la ligne complète alors.
Dans ton premier message tu dis
from 192.168.1.2 (unknown [xx.xxx.xx.xx]) (Authenticated sender: xxxxxx) by mail.MON-SERVEUR-SMTP.com (Postfix) with ESMTPA id 1E-65424927097 for <xxx@xxx.com>; Sun, 20 Mar 2011 02:18:43 +0000 (GMT)
et puis tu cherche une ligne qui commence avec Received
Bref, ta regex ne va jamais fonctionner.
Il faudra que tu donnes le contenus correct des données en entrée.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionmon souci est pour construire cette règle, je n'y arrive pas, j'arrive a replacer la ligne entière avec :
/^Received:.*\[192\.168\.0\.[0-9]/ REPLACE Received from mail.MON-SERVEUR-SMTP.com
qui détecte toutes lignes contenant 192.168.1.2 et la remplace par Received from mail.MON-SERVEUR-SMTP.com
Je ne crois pas.
Dans ta regex tu cherches et les lignes contient 1 (voir en gras
de mon coté voila ou j'en suis :
/^Received:.*\[192\.168\.0\.[0-9]\(Authenticated sender:.*\)\s+(.*by mail\.MON\-SERVEUR\-SMTP\.com[^\n]+ESMTPSA .*)$/im REPLACE from mail.MON-SERVEUR-SMTP.com (localhost.localdomain [127.0.0.1]) by mail.MON-SERVEUR-SMTP.com (Postfix) with SMPT
et ca ne fonctionne pas, il doit y avoir une erreur dans ma ligne.
une idée ?
Oui, t'arrêtes de boire quand tu fais des regex ;-DDD
- tu cherches ESMTPA mais dans regex tu mets ESMTPSA
- pour ip dans 192.168 je te conseille d'utiliser 192\.168\.\d{1,3}\.\d{1,3}
- pourquoi tu mets de backslash avant les tiret?
- dans ton message initial tu dis que tu veuilles obtenir ceci mais tu changes id et aussi l'heure. C'est normal?
- c'est quoi le crochet avant 192?
Quelque chose comme ça, mais je ne suis pas convaincu, il faudrait que tu dises exactement ce que tu veux remplacer exactement et avec quoi.
A vrai dire ce que tu demande c'est relativement simple.
Ce n'est pas la construction de la regex qui me pose de problèmes mais la façon dont elle est utilisé. Je ne connais pas headers_check
/^Received:.*192\.168\.\d{1,3}\.\d{1,3}.*\(Authenticated sender:.*\)\s+by mail\.MON-SERVEUR-SMTP\.com.*ESMTPA.*$/ REPLACE from mail.MON-SERVEUR-SMTP.com (localhost.localdomain [127.0.0.1]) by mail.MON-SERVEUR-SMTP.com (Postfix) with SMPT
GNU/Linux:Linux is Not Ubuntu! Quel linux choisir ne veut pas dire votre Distribution préférée,
106485010510997108
déjà , merci de prendre de ton temps pour mon problème.
Dans ton premier message tu dis
et puis tu cherche une ligne qui commence avec Received
en faite "Received " est forcément avant le "from" c'est un des header des mails envoyés.
donc quand je fait /^Received:.*\[192\.168\.0\.[0-9]/ REPLACE Received from mail.MON-SERVEUR-SMTP.com sa prend tout ce qui est après "Received: 192.168.1.2" , pour plus de clarté voici la ligne complète :
donc /^Received:.*\[192\.168\.0\.[0-9]/ REPLACE Received from mail.MON-SERVEUR-SMTP.com fonctionne correctement. et transforme toute la ligne en Received: from mail.MON-SERVEUR-SMTP.com qui est après REPLACE de ma regex
- tu cherches ESMTPA mais dans regex tu mets ESMTPSA
effectivement une erreur de frape
- pourquoi tu mets de backslash avant les tiret?
car c'est plus jolie (lol)
- dans ton message initial tu dis que tu veuilles obtenir ceci mais tu changes id et aussi l'heure. C'est normal?
encore une erreur de ma part
- c'est quoi le crochet avant 192?
ça aussi c'est jolis :-)
blague à part , voici exactement ce que je veux obtenir, tout ce qui est en gras doit être changer par la regex :
ce qui donne :
j'espère que c'est déjà plus compréhensible comme ça
Dans ton premier message tu dis
from 192.168.1.2 (unknown [xx.xxx.xx.xx]) (Authenticated sender: xxxxxx) by mail.MON-SERVEUR-SMTP.com (Postfix) with ESMTPA id 1E-65424927097 for <xxx@xxx.com>; Sun, 20 Mar 2011 02:18:43 +0000 (GMT)
et puis tu cherche une ligne qui commence avec Received
en faite "Received " est forcément avant le "from" c'est un des header des mails envoyés.
donc quand je fait /^Received:.*\[192\.168\.0\.[0-9]/ REPLACE Received from mail.MON-SERVEUR-SMTP.com sa prend tout ce qui est après "Received: 192.168.1.2" , pour plus de clarté voici la ligne complète :
Received: from 192.168.1.2 (unknown [xx.xxx.xx.xx]) (Authenticated sender: xxxxxx) by mail.MON-SERVEUR-SMTP.com (Postfix) with ESMTPA id 1E-65424927097 for <xxx@xxx.com>; Sun, 20 Mar 2011 02:18:43 +0000 (GMT)
donc /^Received:.*\[192\.168\.0\.[0-9]/ REPLACE Received from mail.MON-SERVEUR-SMTP.com fonctionne correctement. et transforme toute la ligne en Received: from mail.MON-SERVEUR-SMTP.com qui est après REPLACE de ma regex
- tu cherches ESMTPA mais dans regex tu mets ESMTPSA
effectivement une erreur de frape
- pourquoi tu mets de backslash avant les tiret?
car c'est plus jolie (lol)
- dans ton message initial tu dis que tu veuilles obtenir ceci mais tu changes id et aussi l'heure. C'est normal?
encore une erreur de ma part
- c'est quoi le crochet avant 192?
ça aussi c'est jolis :-)
blague à part , voici exactement ce que je veux obtenir, tout ce qui est en gras doit être changer par la regex :
Received: from 192.168.1.2 (unknown [xx.xxx.xx.xx]) (Authenticated sender: xxxxxx) by mail.MON-SERVEUR-SMTP.com (Postfix) with ESMTPA id 1E-65424927097 for <xxx@xxx.com>; Sun, 20 Mar 2011 02:18:43 +0000 (GMT)
ce qui donne :
Received: from mail.MON-SERVEUR-SMTP.com (localhost.localdomain [127.0.0.1]) by mail.MON-SERVEUR-SMTP.com (Postfix) with SMTP id E67A58929974 for <xxx@xxx.com>; Sun, 20 Mar 2011 00:18:41 +0000 (GMT)
j'espère que c'est déjà plus compréhensible comme ça
j'espère que c'est déjà plus compréhensible comme ça
Pas toute à fait ;-)
Regarde ce que j'ai souligné.
Ce ne sont pas les mêmes en-têtes (id et heure ont changé)
C'est normal?
Il faut que je regarde comment fonctionnent, si jamais c'est possible, les captures des motifs avec headers_check
Pas toute à fait ;-)
Regarde ce que j'ai souligné.
Received: from 192.168.1.2 (unknown [xx.xxx.xx.xx]) (Authenticated sender: xxxxxx) by mail.MON-SERVEUR-SMTP.com (Postfix) with ESMTPA id 1E-65424927097 for <xxx@xxx.com>; Sun, 20 Mar 2011 02:18:43 +0000 (GMT)
Ce ne sont pas les mêmes en-têtes (id et heure ont changé)
C'est normal?
Received: from mail.MON-SERVEUR-SMTP.com (localhost.localdomain [127.0.0.1]) by mail.MON-SERVEUR-SMTP.com (Postfix) with SMTP id E67A58929974 for <xxx@xxx.com>; Sun, 20 Mar 2011 00:18:41 +0000 (GMT)
Il faut que je regarde comment fonctionnent, si jamais c'est possible, les captures des motifs avec headers_check
oui c'est tout a fait normale
chaque mail a forcément un ID différent
chaque mail a forcément une heure d'envoi différente
donc c'est deux information ne doive pas être changer par la regex et c'est la que ça coince pour moi ....
chaque mail a forcément un ID différent
chaque mail a forcément une heure d'envoi différente
donc c'est deux information ne doive pas être changer par la regex et c'est la que ça coince pour moi ....
je précise qu'il est possible de mètre plusieurs regex dans ce fichier, peut être que la solution la plus simple serait de faire deux regex différentes ?
une première regex pour la première partie a changer 192.168.1.2 (unknown [xx.xxx.xx.xx]) (Authenticated sender: xxxxxx)
et une deuxièmes regex pour la deuxièmes parties a changer ESMTPA
....
une première regex pour la première partie a changer 192.168.1.2 (unknown [xx.xxx.xx.xx]) (Authenticated sender: xxxxxx)
et une deuxièmes regex pour la deuxièmes parties a changer ESMTPA
....
/^(Received:\s*from\s*)192\.168\.\d{1,3}\.\d{1,3}.*unknown.*\(Authenticated sender:.*\)(\s+by mail\.MON-SERVEUR-SMTP\.com.*)ESMTPA(.*)$/ REPLACE $1 mail.MON-SERVEUR-SMTP.com (localhost.localdomain [127.0.0.1])${2}SMTP$3
GNU/Linux:Linux is Not Ubuntu! Quel linux choisir ne veut pas dire votre Distribution préférée,
106485010510997108
fonctionne pas :-(
je précise que le [xx.xxx.xx.xx] dans le header original est une adresse ip....
je précise que le [xx.xxx.xx.xx] dans le header original est une adresse ip....
peu importe xx.xxx.xxx.xx puisque .* reconnaît tout
Regarde mon test, on voit que tout est modifié correctement
Bref, il faudrait que tu montres ce que tu obtiens pour voir ce qui ne va pas sinon on ne peux pas avancer.
Regarde mon test, on voit que tout est modifié correctement
lami20j@debian-acer:~$ cat joniperdu.pl #!/usr/bin/perl while(<DATA>){ s/^(Received:\s*from\s*)192\.168\.\d{1,3}\.\d{1,3}.*unknown.*\(Authenticated sender:.*\)(\s+by mail\.MON-SERVEUR-SMTP\.com.*)ESMTPA(.*)$/$1 mail.MON-SERVEUR-SMTP.com (localhost.localdomain [127.0.0.1])$2SMTP$3/; print; } __DATA__ Received: from 192.168.1.2 (unknown [xx.xxx.xx.xx]) (Authenticated sender: xxxxxx) by mail.MON-SERVEUR-SMTP.com (Postfix) with ESMTPA id 1E-65424927097 for <xxx@xxx.com>; Sun, 20 Mar 2011 02:18:43 +0000 (GMT) lami20j@debian-acer:~$ lami20j@debian-acer:~$ perl joniperdu.pl Received: from mail.MON-SERVEUR-SMTP.com (localhost.localdomain [127.0.0.1]) by mail.MON-SERVEUR-SMTP.com (Postfix) with SMTP id 1E-65424927097 for <xxx@xxx.com>; Sun, 20 Mar 2011 02:18:43 +0000 (GMT)
Bref, il faudrait que tu montres ce que tu obtiens pour voir ce qui ne va pas sinon on ne peux pas avancer.
pour vérifier je test directement en m'envoyant un mail sur ma boite ymail ou il est possible d'analyser les header, avec ta regex il n'y a aucun changement, le header reste exactement le même
quand je teste avec un truc simple comme :
me header change correctement en :
comment tester la regex sans avoir a m'envoyer un mail a chaque fois ?
j'ai vue que tu fait sa dans un .pl, tu peut m'expliquer ?
quand je teste avec un truc simple comme :
/^Received:.*\[192\.168\.0\.[0-9]/ REPLACE Received from mail.MON-SERVEUR-SMTP.com
me header change correctement en :
Received from mail.MON-SERVEUR-SMTP.com
comment tester la regex sans avoir a m'envoyer un mail a chaque fois ?
j'ai vue que tu fait sa dans un .pl, tu peut m'expliquer ?
j'ai vue que tu fait sa dans un .pl, tu peut m'expliquer ?
Ben, justement, dans le .pl ça marche puisque c'est directement du Perl
Essaie comme ça
Ben, justement, dans le .pl ça marche puisque c'est directement du Perl
Essaie comme ça
/^(Received:\s*from\s*)192\.168\.\d{1,3}\.\d{1,3}.*unknown.*\(Authenticated sender:.*\)(\s+by mail\.MON-SERVEUR-SMTP\.com.*)ESMTPA(.*)$/ REPLACE "$1" mail.MON-SERVEUR-SMTP.com (localhost.localdomain [127.0.0.1]) "$2" SMTP "$3"
Et encore une chose, enlève le crochet, il n'a rien à faire là.
Il n'y a pas de crochet avec 192
quand je teste avec un truc simple comme :
/^Received:.*\[192\.168\.0\.[0-9]/
Justement je suis vraiment étonné que ça marche
Si c'est le cas alors il faudrait que tu m'envoie par mail l'entête puisque je dois comprendre que lorsque tu colles sur ccm ça ne passe pas le crochet
Il n'y a pas de crochet avec 192
quand je teste avec un truc simple comme :
/^Received:.*\[192\.168\.0\.[0-9]/
Justement je suis vraiment étonné que ça marche
Si c'est le cas alors il faudrait que tu m'envoie par mail l'entête puisque je dois comprendre que lorsque tu colles sur ccm ça ne passe pas le crochet
sa fonctionne toujours pas , en mp tu a le header original
voici la source de : /^Received:.*\[192\.168\.0\.[0-9]/
https://www.cyberciti.biz/faq/postfix-remove-hide-hostnames-ip-addresses/
ça marche pourtant !
voici la source de : /^Received:.*\[192\.168\.0\.[0-9]/
https://www.cyberciti.biz/faq/postfix-remove-hide-hostnames-ip-addresses/
ça marche pourtant !
RÉSOLU
my name is jonigood
winer is l'ami20jgood verry goooooood !
merci a toi tu a trouver la bonne regex (pas facile tout de même)
le mot de la fin est :
a bientôt et merci a tous
petite précision , il fallait mètre Received: après le REPLACE et "\d" n'est pas pris en compte, il fallait donc "[0-9]" a la place
my name is jonigood
winer is l'ami20jgood verry goooooood !
merci a toi tu a trouver la bonne regex (pas facile tout de même)
le mot de la fin est :
/^Received:\s*(from\s*)192\.168\.1\.[0-9].*\(Authenticated sender:.*\)(\s+by mail\.MON-SERVEUR-SMTP\.com.*)ESMTPA(.*)$/ REPLACE Received: $1 mail.MON-SERVEUR-SMTP.com (localhost.localdomain [127.0.0.1]) $2 SMTP $3
a bientôt et merci a tous
petite précision , il fallait mètre Received: après le REPLACE et "\d" n'est pas pris en compte, il fallait donc "[0-9]" a la place
Re,
De rien.
Pour la fin de l'histoire ;-)
comment tester la regex sans avoir a m'envoyer un mail a chaque fois ?
Effectivement s'envoyer à chaque fois un mail ce n'est pas le top.
Voici une manière de tester la regex sans avoir besoin de s'envoyer à chaque fois un mail.
La commande est (à faire en root)
On constate effectivement que la classe de caractères \d n'est pas reconnue, la commande ne retourne rien
Si on mets [0-9] ça fonctionne.
Cette fois en revanche la commande retourne le contenu de fichier et la chaîne de remplacement obtenu grâce à la regex
De rien.
Pour la fin de l'histoire ;-)
comment tester la regex sans avoir a m'envoyer un mail a chaque fois ?
Effectivement s'envoyer à chaque fois un mail ce n'est pas le top.
Voici une manière de tester la regex sans avoir besoin de s'envoyer à chaque fois un mail.
La commande est (à faire en root)
postmap -q - regexp:/etc/postfix/header_checks < fichier_qui_contient_l'en_tête
On constate effectivement que la classe de caractères \d n'est pas reconnue, la commande ne retourne rien
:~$ cat /etc/postfix/header_checks /^Received:\s*(from\s*)192\.168\.1\.\d.*\(Authenticated sender:.*\)(\s+by mail\.MON-SERVEUR-SMTP\.com.*)ESMTPA(.*)$/ REPLACE Received: $1 mail.MON-SERVEUR-SMTP.com (localhost.localdomain [127.0.0.1]) $2 SMTP $3 ~$ cat test_head Received: from 192.168.1.2 (unknown [xx.xxx.xx.xx]) (Authenticated sender: xxxxxx) by mail.MON-SERVEUR-SMTP.com (Postfix) with ESMTPA id 1E-65424927097 for <xxx@xxx.com>; Sun, 20 Mar 2011 02:18:43 +0000 (GMT) ~$ sudo postmap -q - regexp:/etc/postfix/header_checks < test_head ~$
Si on mets [0-9] ça fonctionne.
Cette fois en revanche la commande retourne le contenu de fichier et la chaîne de remplacement obtenu grâce à la regex
~$ cat /etc/postfix/header_checks /^Received:\s*(from\s*)192\.168\.1\.[0-9].*\(Authenticated sender:.*\)(\s+by mail\.MON-SERVEUR-SMTP\.com.*)ESMTPA(.*)$/ REPLACE Received: $1 mail.MON-SERVEUR-SMTP.com (localhost.localdomain [127.0.0.1]) $2 SMTP $3 ~$ cat test_head Received: from 192.168.1.2 (unknown [xx.xxx.xx.xx]) (Authenticated sender: xxxxxx) by mail.MON-SERVEUR-SMTP.com (Postfix) with ESMTPA id 1E-65424927097 for <xxx@xxx.com>; Sun, 20 Mar 2011 02:18:43 +0000 (GMT) ~$ sudo postmap -q - regexp:/etc/postfix/header_checks < test_head Received: from 192.168.1.2 (unknown [xx.xxx.xx.xx]) (Authenticated sender: xxxxxx) by mail.MON-SERVEUR-SMTP.com (Postfix) with ESMTPA id 1E-65424927097 for <xxx@xxx.com>; Sun, 20 Mar 2011 02:18:43 +0000 (GMT) REPLACE Received: from mail.MON-SERVEUR-SMTP.com (localhost.localdomain [127.0.0.1]) by mail.MON-SERVEUR-SMTP.com (Postfix) with SMTP id 1E-65424927097 for <xxx@xxx.com>; Sun, 20 Mar 2011 02:18:43 +0000 (GMT)