2017-01-18 1 views
1

У меня есть следующие строки логов в лог-файл access_20170118_14.log -POSIX соответствия регулярных выражений с Nginx logwarn не работает с [: цифры:] класс символов

127.0.0.1 - - [18/Jan/2017:14:22:16 +0000] "GET //fam/shared_generate_test_devicelist.php HTTP/1.1" 200 168 "-" "curl/7.40.0" - 0.008 
127.0.0.1 - - [18/Jan/2017:14:22:24 +0000] "GET //fam/shared_generate_test_devicelist.php HTTP/1.0" 200 168 "-" "curl/7.40.0" - 0.008 

Ниже приводится команда Nginx logwarn, которая выводит эти строки журнала из этого файла журнала, которые имеют код HTTP доступа отличный от 200 и 204.

/usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn_nginx_access /mnt/log/nginx/access_20170118_14.log '!.*HTTP/1.(1|0)\"\s*(200|204)' 

регулярного выражения в указанных выше командных работах, как ожидались.

Однако я хочу избавиться от (1|0), которые добавляются в соответствии с HTTP версии 1.0 и 1.1 и заменяют его любой цифрой, чтобы она работала для любой версии HTTP.

Следующая команда, с классом [:digit:] символов, однако соответствует линии с HTTP версии 1.1 и 1.0, а также с кодом доступа 200 -

/usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn_nginx_access /mnt/log/nginx/access_20170118_14.log '!.*HTTP/1.[:digit:]\"\s*(200|204)' 

Output (не то, что я хочу) -

Log errors: 127.0.0.1 - - [18/Jan/2017:14:22:16 +0000] "GET //fam/shared_generate_test_devicelist.php HTTP/1.1" 200 168 "-" "curl/7.40.0" - 0.008 
127.0.0.1 - - [18/Jan/2017:14:22:24 +0000] "GET //fam/shared_generate_test_devicelist.php HTTP/1.0" 200 168 "-" "curl/7.40.0" - 0.008 
+0

Возможно, вы можете попробовать \ d вместо этого (насколько вы уже используете \ s)? –

+0

ведущий '!' В регулярном выражении, что это? – sweaver2112

ответ

0

Классы символов POSIX должны использоваться внутри символьного класса регулярных выражений, поэтому одна цифра может быть представлена ​​как:

[[:digit:]] 

Обратите внимание на двойные скобки. См. this document для получения дополнительной информации.

Кроме того, у вас есть голый ., представляющий период (я полагаю), который должен быть экранирован с обратной косой чертой как \., чтобы представлять буквальный период.

+0

Голая '.' как-то работала. Не знаете, как это сделать. Во всяком случае, это ускользнуло. –

+0

Также, пожалуйста, посмотрите, можете ли вы ответить на этот вопрос http://stackoverflow.com/questions/41716338/modify-regex-match-in-nagios-logwarn-which-matches-against-string-to-not-match –

Смежные вопросы