Я дал команду сборке mvn для создания данных профилирования, которые я хочу проанализировать позже. Поэтому ниже я создал скрипт sed для генерации json-данных из выходных данных профилировщиков. Я называю сценарий с
cat some.log | sed -nf thescript.sed > some.json
Он создает вложенный список json-объектов ("проектов"), но каждый список заканчивается символом «,».
Чтобы сделать из этого действительный файл json, я выполняю следующие шаги в моем любимом редакторе.
- Объединяя все в одну строку
- вставьте объект переноса, добавив "{\" list\":[" и добавив "]}" ко всему содержимому.
- заменить все вхождения ",]" (ошибочно завершенные списки) на "]"
- вставьте разрыв строки после каждого проекта, чтобы избежать сбоев в JSON-разборе из-за слишком длинной строки.
В настоящее время я выполняю эти шаги вручную, и хочу, чтобы это тоже было написано.
- Как я могу либо заставить скрипт sed производить корректный json (то есть делать разрывы строк только тогда, когда я хочу их, или не ставить этот завершающий символ ",")
или как я могу написать сценарий выше в другом фильтре?
/[PROFILER]/ s/\[PROFILER\] \(.*\)ms : Task (project-execute new-mvifp:\(.*\):\(.*\) ( task-segment: \[\(.*\)\] )) started./{"\2":{"timestamp":\1,"project":"\2","tasks":"\4","branch":"\3","segments":[/p /[PROFILER]/ s/\[PROFILER\] \(.*\)ms : Task (Segment:\(.*\)) started./{"\2":{"timestamp":\1,"segment":"\2","mojos":[/p /[PROFILER]/ s/\[PROFILER\] \(.*\)ms : Task (mojo-execute \(.*\) {execution: \(.*\)}) started./{"\2":{"timestamp":\1,"mojo":"\2","execution":"\3",/p /[PROFILER]/ s/\[PROFILER\] \(.*\)ms : Task (mojo-execute \(.*\) {execution: \(.*\)}) finished.*duration \(.*\)ms./"duration":\4}},/p /[PROFILER]/ s/\[PROFILER\] \(.*\)ms : Task (Segment:\(.*\)) finished.*duration \(.*\)ms./],"duration":\3}},/p /[PROFILER]/ s/\[PROFILER\] \(.*\)ms : Task (project-execute new-mvifp:\(.*\):\(.*\) ( task-segment: \[\(.*\)\] )) finished.*duration \(.*\)ms./],"duration":\5}},/p