Caso exiqgrep insensível?

3

Minha fila de mensagens está cheia de mensagens devolvidas para o mesmo domínio, mas em casos mistos.

Eu tentei usar exiqgrep para filtrar esses e-mails da minha fila, mas parece que o comando faz distinção entre maiúsculas e minúsculas. Existe alguma maneira de realizar uma pesquisa insensível a maiúsculas e minúsculas?

    
por Aron Rotteveel 03.09.2013 / 13:39

2 respostas

3

Como o outro cavalheiro apontou, o programa exiqgrep é apenas um script em perl. Ele leva o valor bruto passado para a função -r (destinatário) e o usa em uma correspondência de padrão. A correspondência de padrões é um teste simples de $rcpt =~ /$opt{r}/ perl, a correspondência padrão, já que não está especificada, é sensível a maiúsculas e minúsculas.

Como todas as coisas perl, TIMTOWTDI (há mais de uma maneira de fazê-lo). Como a função acima não tira nem desinfeta o valor passado para -r, você pode simplesmente incorporar um modificador de maiúsculas e minúsculas no regex. Veja perldoc perlre para mais detalhes sobre como funciona a sequência (?MODIFIERS:...) .

Aqui está um exemplo em que mostro que uma pesquisa de caso misto não encontra o domínio que estou procurando, mas usando um modificador de sinalizador embutido como parte do termo de pesquisa, ele o encontra.

OVZ-CentOS58[root@ivwm51 ~]# exiqgrep -r '[email protected]'
26h  4.0K 1VGRud-0001sm-P1 <> *** frozen ***
      [email protected]

OVZ-CentOS58[root@ivwm51 ~]# exiqgrep -r '[email protected]'
OVZ-CentOS58[root@ivwm51 ~]# exiqgrep -r '(?i:[email protected])'
26h  4.0K 1VGRud-0001sm-P1 <> *** frozen ***
      [email protected]

Sua pesquisa será semelhante, algo como:

(?i:@thedomainyouseek.com)
    
por 03.09.2013 / 15:14
2

A página de manual não mostra essa opção, mas o utilitário exiqgrep é um script perl cujo fonte você pode modificar para atender às suas necessidades :


114 sub selection() {
115   foreach my $msg (keys(%id)) {
116     if ($opt{f}) {
117       # Match sender address
118       next unless ($id{$msg}{from} =~ /$opt{f}/); # here
119     }
120     if ($opt{r}) {
121       # Match any recipient address
122       my $match = 0;
123       foreach my $rcpt (@{$id{$msg}{rcpt}}) {
124         $match++ if ($rcpt =~ /$opt{r}/); # or here
125       }
126       next unless ($match);
127     }
128     if ($opt{s}) {
129       # Match against the size string.
130       next unless ($id{$msg}{size} =~ /$opt{s}/);
131     }
132     if ($opt{y}) {
133       # Match younger than
134       next unless ($id{$msg}{ages}  $opt{o});
139     }
140     if ($opt{z}) {
141       # Exclude non frozen
142       next unless ($id{$msg}{frozen});
143     }
144     if ($opt{x}) {
145       # Exclude frozen
146       next if ($id{$msg}{frozen});
147     }
148     # Here's what we do to select the record.
149     # Should only get this far if the message passed all of
150     # the active tests.
151     $id{$msg}{d} = 1;
152     # Increment match counter.
153     $mcount++;
154   }
155 }
    
por 03.09.2013 / 14:32