Я дал команду сборке 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
    

0