OVH Cloud OVH Cloud

sed sauts de ligne, multiligne etc..

21 réponses
Avatar
Christophe PEREZ
Bonjour,

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.

Merci d'avance.

--
Christophe PEREZ
Écrivez moi sans _faute !

1 réponse

1 2 3
Avatar
Jacques L'helgoualc'h
Christophe PEREZ a dit :

Le Wed, 19 May 2004 22:45:18 +0200, Jacques L'helgoualc'h a écrit:

Sans le 1{}, il s'appliquera aussi à chaque paragraphe du corps
(tu verrais la différence sur les en-têtes d'un message joint).


Ah, ok oui, effectivement pas bon.
Mais comme je fais pour inclure ce 1{} dans mon script si je ne suis pas
en ligne de commande (oui, je sais, je suis versatile...)


Remplace "le contenu" par "1{le contenu}", sauf la ligne shebang ;)


[...]

/^Subject:[[:blank:]]$/Ms/[[:blank:]]/ Pas de Titre/


Avec un sujet vide, le premier caractère espace de la 1ère ligne
donne un « From Pas de Titre...».


Argh... donc ça ne tient pas compte de mon premier
/^Subject:[[:blank:]]$/M ??


Ben si, mais alors la substitution s'opère sur le premier espace
trouvé, tous les en-têtes étant empilés par la boucle initiale.


[variables Sed]
Pas mieux... mais je préfère 'le script', et '"$1"' pour
restreindre bash au $1 que je veux interpréter.


Pas compris là...


"le script avec du $1 dedans" = 'le script avec du '"$1"' dedans'

--
Jacques L'helgoualc'h



1 2 3