Как использовать ограниченные символы в egrep?

Я пытаюсь использовать регулярное выражение в egrep на Centos 5.10, основываясь на том, что я сделал из этого вопроса на SO.

T12345 .{1,100}[\n\r].{1,100}2014.03.04 

Я могу успешно сопоставить регулярное выражение с контентом в моем браузере, но когда я пытаюсь использовать его в egrep, ничего не возвращается, хотя в моем каталоге несколько совпадений.

Рабочий пример Regex здесь

Вот эгреп, как я его использую.

 egrep -l "T12345 .{1,100}[\n\r].{1,100}2014.03.04" logfiles_*.txt 

Насколько я могу судить, я не избегаю ограниченных символов, но ничего, что я пробовал, похоже, работает. Как я могу адаптировать это регулярное выражение для использования в egrep?

grep соответствует строкам ввода. Если вы хотите совместить несколько строк, используйте другую утилиту. Например, используйте pcregrep :

 pcregrep -M "T12345 .{1,100}[\n\r].{1,100}2014.03.04" filename 

Это приведет к:

 31/01/2014 11:15:40 | Bla Bla Bla Bla T12345 Bla Bla Bla 31/01/2014 11:15:40 | Bla Bla Bla 2014/03/04 Bla Bla Bla 

для вашего ввода.

Ваша проблема в том, что egrep и grep обычно читают одну строку, а затем сравнивают с данным регулярным выражением.

Чтобы ваши решения regexp работали, вам нужна опция -z для egrep.

-z, --null-data
Обработайте вход как набор строк, каждый из которых заканчивается нулевым байтом (символ ASCII NUL) вместо новой строки. Подобно опции -Z или –null, этот параметр может использоваться с командами типа sort -z для обработки произвольных имен файлов.

Поэтому попробуйте следующее: egrep -l -z "T12345 .{1,100}\s+.{1,100}2014.03.04" logfiles_*.txt