2015-02-24 3 views
2

Я использую Logwatch на машине с брандмауэром. Каждый день я получаю по электронной почте полного записей, как следующее:многострочное регулярное выражение для Logwatch ignore.conf

From 123.123.123.10 - 28087 packets 
    To 123.123.123.1 - 2 packets 
     Service: http (tcp/80) (Firewall Allow) - 2 packets 
    To 123.123.123.2 - 1 packet 
     Service: http (tcp/80) (Firewall Allow) - 1 packet 
    To 123.123.123.3 - 7 packets 
     Service: https (tcp/443) (Firewall Allow) - 7 packets 
From 123.123.123.11 - 28087 packets 
    To 123.123.123.1 - 2 packets 
     Service: http (tcp/80) (Firewall Allow) - 2 packets 
    To 123.123.123.2 - 1 packet 
     Service: http (tcp/80) (Firewall Allow) - 1 packet 
    To 123.123.123.3 - 7 packets 
     Service: https (tcp/443) (Firewall Allow) - 7 packets 

Я хотел бы поставить запись в моем файле ignore.conf, которая пропускает всю информацию для конкретной системы или подсети. Поскольку записи ignore.conf просто Perl-стиль регулярных выражений, если я ставлю

^ From 123\.123\.123\.10 

в файле, согласующий «От» линии удаляется, а все остальные строки остаются. Мой вопрос: могу ли я создать одно регулярное выражение, которое будет соответствовать не только строке «От», но и все последующие строки, до тех пор, пока не произойдет следующая строка, начинающаяся с «^ От»? Я знаю, что вы можете сделать это с помощью sed, но я не уверен, что это возможно только с регулярным выражением в ignore.conf. Спасибо заранее всем, кто отвечает.

ответ

0

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

From\s+123\.123\.123\.10.+(?=\s+From)

+0

В Perl-стиль регулярных выражений, точка соответствует всем, кроме символа новой строки. – Leslie

+0

См. Http://docstore.mik.ua/orelly/perl/cookbook/ch06_07.htm, в нем говорится: «/ s позволяет. Match newline (обычно это не так)». См. Https://regex101.com/r/qY4yB1/1, режим PCRE (совместимые с Perl регулярные выражения) работает со входом. –

+0

Я стою исправлено; моя книга «Программирование Perl», очевидно, устарела. Тем не менее, через несколько дней с вашим предложенным регулярным выражением в файле ignore.conf, я все еще вижу строки, которые должны были быть удалены. если вы прощаете недоверчивость, возможно, журнал не интерпретирует регулярное выражение для текущего стандарта? Можно ли написать регулярное выражение, которое не предполагает, что точка захватывает новые символы строки, поэтому это можно было протестировать? Еще раз спасибо за вашу помощь. – Leslie

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