¿Cómo puedo mejorar o ajustar mi script sed?

¿Cómo puedo mejorar o ajustar mi script sed?

Instrumenté una compilación de mvn para emitir datos de perfiles, que quiero analizar más adelante. Por lo tanto, creé el script sed a continuación para generar datos json a partir de la salida de los perfiladores. Llamo al guión con

cat some.log | sed -nf thescript.sed > some.json

Produce una lista anidada de objetos json ("proyectos"), pero cada lista termina con un ",".

Para crear un archivo json válido a partir de esto, realizo los siguientes pasos en mi editor favorito.

  • Uniendo todo a una línea
  • inserte un objeto envolvente anteponiendo "{\"list\":[" y agregando "]}" a todo el contenido.
  • reemplace todas las apariciones de ", ]" (listas terminadas incorrectamente) por "]"
  • inserte un salto de línea después de cada proyecto, para evitar fallas en el análisis JSON debido a una línea demasiado larga.

Actualmente realizo estos pasos manualmente y también quiero tener esto escrito.

  • ¿Cómo puedo hacer que el script sed produzca un json válido (es decir, hacer saltos de línea?solocuando los quiero, o no pongas eso terminando ","")
  • ¿O cómo puedo programar los pasos anteriores en otro filtro?

    /[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
    

información relacionada