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