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 -v
ist 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 -v
Schalter gibt Ihnen alle Zeilen aus, die nicht übereinstimmen, also:
egrep -v 'HTTP[^"]*" (200|204)'