Bonjour,
Je me bagarre avec une regexp multiline qui me résiste. Un gourou perl
aurait-il la solution ?
Je parcours des logs de fichiers par un programme et je souhaite
supprimer la ligne contenant une chaine PLUS la ligne suivante.
Exemple : le log contient :
Mar 13 00:05:16 pfsense1 pf: 00:00:00.000133 rule 122/0(match): block in
on em0: (tos 0x0, ttl 102, id 256, offset 0, flags [none], proto TCP
(6), length 40)
Mar 13 00:05:16 pfsense1 pf: 218.60.128.142.6000 >
147.173.21.253.1433: Flags [S], cksum 0x3cd3 (correct), seq 294715392,
win 16384, length 0
Mar 13 00:05:16 pfsense1 pf: 00:00:00.000021 rule 25/0(match): pass out
on em2_vlan22: (tos 0x0, ttl 101, id 256, offset 0, flags [none], proto
TCP (6), length 40)
Mar 13 00:05:16 pfsense1 pf: 218.60.128.142.6000 >
147.173.21.206.1433: Flags [S], cksum 0xff73 (correct), seq 1327431680,
win 16384, length 0
Mar 13 00:05:16 pfsense1 pf: 00:00:00.000011 rule 25/0(match): pass out
on em2_vlan22: (tos 0x0, ttl 101, id 256, offset 0, flags [none], proto
TCP (6), length 40)
Mar 13 00:05:16 pfsense1 pf: 218.60.128.142.6000 >
147.173.21.182.1433: Flags [S], cksum 0xd920 (correct), seq 1971978240,
win 16384, length 0
Je veux supprimer les lignes contenant "(match): pass " et la ligne
suivante du match.
Evidement, on garde précieusement les autres lignes...
J'ai essayé des trucs comme :
preg_grep ('#^pf: .+\(match\): pass (out|in) on (\n|.)+^pf:.+$#sm',
$logs, PREG_GREP_INVERT);
Mais cela ne matche pas.
Je suis en PHP, mais c'est un problème de regexp.
Avez-vous des idées ?
Merci
Dom