Как я могу улучшить или обернуть свой sed-скрипт?

Как я могу улучшить или обернуть свой sed-скрипт?

Я инструментировал сборку mvn для выпуска данных профилирования, которые я хочу проанализировать позже. Поэтому я создал скрипт sed ниже, чтобы генерировать json-data из выходных данных профилировщика. Я вызываю скрипт с помощью

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
    

Связанный контент