Я ищу регулярное выражение, которое можно использовать для сканирования ошибок 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)'