Expressão regular para monitorar erros HTTP em logs do Apache

Expressão regular para monitorar erros HTTP em logs do Apache

Estou procurando uma expressão regular que possa usar para verificar erros de HTTP em meus arquivos de log padrão do Apache.

Eu sou interessante em combinar todas as linhas quenãoter um status de retorno HTTP 200 ou HTTP 204.

Eu posso combinar as linhas quefazercontém código de retorno HTTP 204 ou HTTP 200

grep 'HTTP[^"]*" 204 \| HTTP[^"]*" 200'

Mas eu gostaria de ter o inverso. Também tenho certeza de que a expressão acima pode ser otimizada.

Preciso alimentar essa expressão regular para um programa externo, portanto, usá-la grep -vpara invertê-la não é uma opção.

Responder1

Expressões regulares comuns não incluem uma maneira de negar nada, exceto um único caractere, então acho que você terá que fornecer toda a lista de códigos que deseja:

HTTP[^"]*" (1|20[12356]|3|4|5)

REs compatíveis com Perl permitem negar strings de texto, então se você estivesse usando aqueles, você poderia usar

HTTP[^"]*" (?!(200|204))

Responder2

A -vopção fornece todas as linhas que não correspondem, então:

egrep -v 'HTTP[^"]*" (200|204)'

informação relacionada