У меня есть файл с кучей ошибок в нем. Я использовал grep, чтобы извлечь все ошибки JSONExcpetion и сохранить их в новом файле, например:

sudo grep -Hrn "JSONException" 2016-* >> jsonexception.txt

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

В моем Java-коде я использую следующее регулярное выражение для определения правильного форматирования идентификатора в String:

^([A-Fa-f0-9]{24})$

Могу ли я использовать что-то похожее с grep, чтобы получить идентификаторы из jsonexception.txt и сохранить их в другом файле?

Образец из журнала:

2016-02/server-2016-02-11-3.log: 17425: 11/ фев / 2016 12: 08: 35,519 [ОШИБКА] [Thread-3] - WorkerRunnable: Worker 2: Возникла исключительная ситуация JSONException для строки: {"DEVICE": [{"ID": " 32584305d2ff32051d06dfff "}, {"TimeStamp": 1455185304, "Event": "Boot", "BuildDate": "11 февраля 2016", "BuildTime": "10:48: 00 "," Reason ":" Power on Reset "," FSHigh ": 485," FSLow ": 475," VerMajor ": 0," VerMinor ": 9," VerRevision ": 2," VerPatch ": 2," MAC ":" 00: 06: 66: 3a: 26: 5c "," WlanVersion ":" 4.75 "," WlanModuleType ":" RN131 "," BoardRev ":" RevD1 "," DisinfectSeconds ": 0}, {" TimeStamp ": 1455185316," Событие ":" CurrentSettings " "IssuedTime": 0, "FSHigh": 535, "FSLow": 425, "долг": 100, "Частота": 1000, "Current": 80," IdlePeriod ": 30," StillOnPeriod ": 20," Auto OnPeriod ": 43200," AutoOnDuration ": 10," MaxOnTime ": 14400," FlowSensitivity ": 50," LidSwitches ": 1," UvFluxWarn ": 70," UvFluxInsufficient ": 40," Фирменный сервер ":" ��� ^ A. ^ B� ^ B. ^ P� ^ K� ^ G� ^ C�JF ^ M� �H�O�zp ^ HI���� ^ C� ^ G� ^ C� ^ M�B� ^ N� ^ R��� ����O ^ B�pG� ^ D "," FirmPort: 1, "DeviceTypeName": " "," WlanTimeZone ": 25," LedRegArray ": [{" Bo ardId ":" A "," LedNo ": 0," RegState ":" Regulate "}, {" BoardId ":" A "," LedNo ": 1, "RegState": "Регулировать"}]}, { "TimeStamp": 1455185316, "Событие": "CurrentWlanSettings", "SettingsArray": [{ "WlanSettingsId": 1}, { "WlanSettingsId": 2}, {"WlanSettingsId": 3}]}, {"TimeStamp": 145518531 5, "Событие": "Соединить", "WlanSettingsId": 1, "MAC": "00: 06: 66: 3a: 26: 5c", "IP": "192.168.1.125", "WLAN": "TEST1", "RSSI": - 52, "Версия": "4,75", "AP-MAC": "ас: 9e: 17: еа: 0f: 3c "}, {" End ": 100}]} ^ M

1 ответ1

2

Если ваш grep поддерживает -o , вы можете использовать следующее:

grep -o '"ID":"[a-f0-9]\{24\}"' | cut -d\" -f4

Первая часть извлекает только часть "ID":"..." , вторая выбирает 4-й столбец, используя " в качестве разделителя», то есть сам идентификатор.

Гораздо безопаснее включить "ID": в запросе, иначе вы можете случайно сопоставить другую часть строки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .