#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. Идеальный. Именно то, что я искал. Прохладный. Спасибо.