Регулярное выражение для мониторинга ошибок HTTP в журналах Apache

Регулярное выражение для мониторинга ошибок HTTP в журналах Apache

Я ищу регулярное выражение, которое можно использовать для сканирования ошибок HTTP в моих стандартных файлах журналов Apache.

Мне интересно сопоставить все линии, которыенеиметь статус возврата HTTP 200 или HTTP 204.

Я могу сопоставить строки, которыеделатьсодержат код возврата HTTP 204 или HTTP 200

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

Но я хотел бы иметь обратное. Я также уверен, что выражение выше можно оптимизировать.

Мне нужно передать такое регулярное выражение внешней программе, поэтому grep -vего инвертирование не представляется возможным.

решение1

Обычные регулярные выражения не предусматривают возможности отрицания чего-либо, кроме одного символа, поэтому я думаю, вам придется предоставить весь список кодов, которые вам нужны:

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

Совместимые с Perl RE позволяют вам отрицать строки текста, поэтому, если вы их используете, вы можете использовать

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

решение2

Переключатель -vвыводит все строки, которые не совпадают, поэтому:

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

Связанный контент