Регулярное выражение для мониторинга ошибок HTTP в логах apache
Я ищу регулярное выражение, которое я могу использовать для поиска ошибок HTTP в моих стандартных файлах журнала apache.
Мне интересно сопоставить все строки, которые не имеют статуса возврата HTTP 200 или HTTP 204.
Я могу сопоставить строки, содержащие код возврата HTTP 204 или HTTP 200
grep 'HTTP[^"]*" 204 \| HTTP[^"]*" 200'
Но я хотел бы иметь обратное. Я также уверен, что приведенное выше выражение может быть оптимизировано.
Мне нужно передать такое регулярное выражение для внешней программы, поэтому с помощью grep -v
инвертировать это не вариант.
2 ответа
Обычные регулярные выражения не включают в себя способ отрицания чего-либо, кроме одного символа, поэтому я думаю, что вам придется предоставить весь список кодов, которые вы действительно хотите:
HTTP[^"]*" (1|20[12356]|3|4|5)
Perl-совместимые RE позволяют вам отвергать строки текста, поэтому, если вы используете их, вы можете использовать
HTTP[^"]*" (?!(200|204))
-v
switch дает вам все строки, которые не совпадают, поэтому:
egrep -v 'HTTP[^"]*" (200|204)'