Regulärer Ausdruck zur Überwachung von HTTP-Fehlern in Apache-Protokollen

Regulärer Ausdruck zur Überwachung von HTTP-Fehlern in Apache-Protokollen

Ich suche nach einem regulären Ausdruck, mit dem ich meine Standard-Apache-Protokolldateien nach HTTP-Fehlern suchen kann.

Ich bin daran interessiert, alle Zeilen zuzuordnen, dienichthaben einen HTTP 200- oder HTTP 204-Rückgabestatus.

Ich kann die Zeilen zuordnen, dieTunenthalten entweder den Rückgabecode HTTP 204 oder HTTP 200

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

Aber ich hätte gern das Gegenteil. Ich bin auch sicher, dass der obige Ausdruck optimiert werden kann.

Ich muss einen solchen regulären Ausdruck in ein externes Programm einspeisen, daher grep -vist die Verwendung zum Umkehren keine Option.

Antwort1

Gewöhnliche reguläre Ausdrücke bieten keine Möglichkeit, irgendetwas außer einem einzelnen Zeichen zu negieren. Daher müssen Sie meiner Ansicht nach die gesamte Liste der gewünschten Codes angeben:

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

Perl-kompatible REs erlauben es Ihnen, Textzeichenfolgen zu negieren. Wenn Sie diese also verwenden, können Sie verwenden

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

Antwort2

Der -vSchalter gibt Ihnen alle Zeilen aus, die nicht übereinstimmen, also:

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

verwandte Informationen