Множественное сопоставление шаблонов

#regex

#регулярное выражение

Вопрос:

Я пытаюсь распечатать раздел файла между двумя регулярными выражениями. Изюминка в том, что первое выражение может быть либо шаблоном 1, Error: либо шаблоном 2 FAILED , причем последнее выражение является фиксированным шаблоном ( ---------- ).

Пример раздела файла:

 Line 01

10-10-16 22:23:34 Error: Failed to update discount row [Customer ABC|£-336.95]
10-10-16 22:23:34 Error processing file information, Block 27.
----------------------------------------------------------------------
Line 05

Line 06

Line 07

10-10-16 22:26:52 Error: Failed to update discount row [Customer DEF|£-0.66]
10-10-16 22:26:52 Error processing file information, Block 37.
----------------------------------------------------------------------
Line 11

Line 12

Line 13

20161010 22:28:25 File 6 FAILED... FILE11.txt
----------------------------------------------------------------------
Line 16

Line 17

Line 18

10-10-16 22:31:30 Error: Failed to update discount row [Customer JKL|£-155.88]
10-10-16 22:31:30 Error processing file information, Block 3.
----------------------------------------------------------------------
Line 22

Line 23

Line 24

10-10-16 22:33:04 Error: Failed to update discount row [Customer MNO|£-12.65]
10-10-16 22:33:04 Error processing file information, Block 9.
Line 27

Line 28

Line 29

20161010 22:35:41 File 7 FAILED... FILE12.txt
----------------------------------------------------------------------

The output I'm looking for is below

10-10-16 22:23:34 Error: Failed to update discount row [Customer ABC|£-336.95]
10-10-16 22:23:34 Error processing file information, Block 27.
----------------------------------------------------------------------
10-10-16 22:26:52 Error: Failed to update discount row [Customer DEF|£-0.66]
10-10-16 22:26:52 Error processing file information, Block 37.
20161010 22:28:25 File 6 FAILED... FILE11.txt
----------------------------------------------------------------------

10-10-16 22:31:30 Error: Failed to update discount row [Customer JKL|£-155.88]
10-10-16 22:31:30 Error processing file information, Block 3.
----------------------------------------------------------------------
10-10-16 22:33:04 Error: Failed to update discount row [Customer MNO|£-12.65]
10-10-16 22:33:04 Error processing file information, Block 9.
20161010 22:35:41 File 7 FAILED... FILE12.txt
----------------------------------------------------------------------
  

То, что мне удалось получить, — это одно или другое с помощью этой команды:

 cat FILE* | sed -n '/Error/,/------/p'  >> ${TEMP}/err.tmp

cat FILE* | sed -n '/FAILED/,/------/p' >> ${TEMP}/err.tmp
  

Но мой вывод не в том порядке, в котором текст отображается в файле:

 10-10-16 22:23:34 Error: Failed to update discount row [Customer ABC|£-336.95]
10-10-16 22:23:34 Error processing file information, Block 27.
----------------------------------------------------------------------
10-10-16 22:26:52 Error: Failed to update discount row [Customer DEF|£-0.66]
10-10-16 22:26:52 Error processing file information, Block 37.
----------------------------------------------------------------------
10-10-16 22:31:30 Error: Failed to update discount row [Customer JKL|£-155.88]
10-10-16 22:31:30 Error processing file information, Block 3.
----------------------------------------------------------------------
10-10-16 22:33:04 Error: Failed to update discount row [Customer MNO|£-12.65]
10-10-16 22:33:04 Error processing file information, Block 9.
----------------------------------------------------------------------
20161010 22:28:25 File 6 FAILED... FILE11.txt
----------------------------------------------------------------------
20161010 22:35:41 File 7 FAILED... FILE12.txt
----------------------------------------------------------------------
  

Буду признателен за любую помощь, поскольку я искал решение в Интернете и не смог его найти.

Ответ №1:

awk на помощь!

 $ awk '/Error/||/Failed/,/----/' file
  

Комментарии:

1. Идеальный. Именно то, что я искал. Прохладный. Спасибо.