[Perl] problème mise au point regexp

Eric DUVAL eduval at ligfy.fr
Dim 26 Mar 22:15:44 CEST 2017


Bonjour,

Je dois anonymiser un fichier contenant des lignes de la forme:
(STRING == je ne peux pas transmettre les vraies données)
Aucune des lignes ne se ressemblent. Cette ligne est donnée à titre 
d'exemple.
Le nombre de var=value peut varier de 0 à n.

file.log:Mar 21 19:19:57 STRING1 STRING2 "STRING3" - - 
[21/Mar/2017:19:19:57 +0100] "/uri?var1=value1&var2=value2&var3=value3" 
200 0.037-0.033=0.004 POST 484 - "STRING4" "STRING5" "STRING6"

Et ressortir avec des lignes de la forme:

file.log:Mar 21 19:19:57 STRING1 STRING2 "STRING3" - - 
[21/Mar/2017:19:19:57 +0100] "/uri?var1=xxx&var2=xxx&var3=xxx" 200 
0.037-0.033=0.004 POST 484 - "STRING4" "STRING5" "STRING6"

ou de la forme

file.log:Mar 21 19:19:57 STRING1 STRING2 "STRING3" - - 
[21/Mar/2017:19:19:57 +0100] "/uri" 200 0.037-0.033=0.004 POST 484 - 
"STRING4" "STRING5" "STRING6"

Après de multiples tentatives, je n'arrive à mettre au point 
l'expression régulière qui va bien :-(

Le code perl est de la forme:
(J'ai séparé les expressions pour la clarté de l'exemple)

[...]
while( <in> ) {
	s/(\?.*)=.*([&\"])/${1}=xxx${2}/;
         s/(&.*)=.*([&\"])/${1}=xxx${2}/;
}
[...]

J'ai essayé des expressions plus ou moins complexes mais sans résultats.

Merci pour l'aide.

Eric.


Plus d'informations sur la liste de diffusion Perl