Я пытаюсь написать скрипт синтаксического анализа журнала для извлечения неудачных событий. Я могу вытащить их с Grep:Сценарий оболочки/регулярное выражение: извлечение на нескольких линиях
$ grep -A5 "FAILED" log.txt
2008-08-19 17:50:07 [7052] [14] DEBUG: data: 3a 46 41 49 4c 45 44 20 20 65 72 72 3a 30 32 33 :FAILED err:023
2008-08-19 17:50:07 [7052] [14] DEBUG: data: 20 74 65 78 74 3a 20 00 text: .
2008-08-19 17:50:07 [7052] [14] DEBUG: Octet string dump ends.
2008-08-19 17:50:07 [7052] [14] DEBUG: SMPP PDU dump ends.
2008-08-19 17:50:07 [7052] [14] DEBUG: SMPP[test] handle_pdu, got DLR
2008-08-19 17:50:07 [7052] [14] DEBUG: DLR[internal]: Looking for DLR smsc=test, ts=1158667543, dst=447872123456, type=2
--
2008-08-19 17:50:07 [7052] [8] DEBUG: data: 3a 46 41 49 4c 45 44 20 20 65 72 72 3a 30 32 34 :FAILED err:024
2008-08-19 17:50:07 [7052] [8] DEBUG: data: 20 74 65 78 74 3a 20 00 text: .
2008-08-19 17:50:07 [7052] [8] DEBUG: Octet string dump ends.
2008-08-19 17:50:07 [7052] [8] DEBUG: SMPP PDU dump ends.
2008-08-19 17:50:07 [7052] [8] DEBUG: SMPP[test] handle_pdu, got DLR
2008-08-19 17:50:07 [7052] [8] DEBUG: DLR[internal]: Looking for DLR smsc=test, ts=1040097716, dst=447872987654, type=2
То, что я заинтересован в том, для каждого блока, код ошибки (т.е. «023» часть «: FAILED ERR: 023» на первой линии) и dst number (т.е. «447872123456» от «dst = 447872123456» на последней строке.)
Может ли кто-нибудь помочь с одним слоем оболочки, чтобы извлечь эти два значения, или дать некоторые подсказки относительно того, как я должен подходить к этому ?
Помните, что используемая команда grep не является стандартной - она использует функцию GNU-only -A 5; Аналогично, опция egrep -o не является стандартной. Это предупреждение - не большая проблема (если вы не используете GNU grep/egrep). –