Grep регистрируют и получают текст между разделителями журнала

Можно инвертировать логику здесь: просто сохраните все соответствующие каталоги и регулярные файлы в фиксированном, центральном каталоге, и переместите абсолютные символьные ссылки.

4
13.05.2014, 00:43
2 ответа

Если вы знаете, насколько велика запись, вы можете вывести дополнительные строки контекста до ( -B ) и после ( -A ) строка соответствия, например

grep -A2 -B2 'Fields' sample.log

или для контекста до и после строки соответствия

grep -C3 'Fields' sample.log

Насколько мне известно, единственный способ выполнить истинное многострочное сопоставление (а не сопоставление одной строки плюс контекст) в GNU grep - это использовать регулярное выражение PCRE режим ( -P ) с флагом -z для предотвращения прерывания при переводе строки. Например, вы можете попробовать

grep -zPo '(\n-+\n)\K(.|\n)+?Fields(.|\n)+?(?=\n-+\n)'

, который выполняет нежадное сопоставление строки Fields , окруженной любыми символами ИЛИ новой строки, при условии, что она заполнена новой строкой-дефисами-новой строкой разделители. Эквивалентным выражением в pcregrep является

pcregrep -Mo '(\n-+\n)\K(.|\n)+?Fields(.|\n)+?(?=\n-+\n)'


. Другой вариант для этого типа данных со структурой записей - awk: в частности, GNU awk позволяет использовать регулярное выражение для внутреннего разделителя записей RS, например.

$ gawk -vRS='\n-+\n' '/Fields/ {print}' sample.log

r132279 | USERID | 2014-04-30 12:59:09 -0700 (Wed, 30 Apr 2014) | 3 lines

Removed unused "Calculated Fields" column entry.

Jira ID: JIRA-977
6
27.01.2020, 20:49

Решение Perl, аналогичное gawk в ответе Steeldriver на случай gawk недоступно:

perl -ne 'BEGIN{$/= "-"x72 . "\n"} chomp and print if /Fields/' log_file

Замените 72 фактическим количеством тире в разделителе.

3
27.01.2020, 20:49

Теги

Похожие вопросы