Wie kann ich mein Sed-Skript verbessern oder umschließen?

Wie kann ich mein Sed-Skript verbessern oder umschließen?

Ich habe einen MVN-Build instrumentiert, um Profildaten auszugeben, die ich später analysieren möchte. Dazu habe ich das folgende Sed-Skript erstellt, um JSON-Daten aus der Ausgabe des Profilers zu generieren. Ich rufe das Skript mit

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

Es erstellt eine verschachtelte Liste von JSON-Objekten („Projekte“), aber jede Liste wird mit einem „“, beendet.

Um daraus eine gültige JSON-Datei zu erstellen, führe ich die folgenden Schritte in meinem bevorzugten Editor aus.

  • Alles zu einer Linie zusammenfügen
  • Fügen Sie ein umschließendes Objekt ein, indem Sie dem gesamten Inhalt "{\"list\":[" voranstellen und "]}" anhängen.
  • Ersetzen Sie alle Vorkommen von ", ]" (falsch abgeschlossene Listen) durch "]"
  • Fügen Sie nach jedem Projekt einen Zeilenumbruch ein, um Abstürze beim JSON-Parsing aufgrund zu langer Zeilen zu vermeiden.

Ich führe diese Schritte derzeit manuell aus und möchte dies auch per Skript erledigen.

  • Wie kann ich das Sed-Skript dazu bringen, gültiges JSON zu erzeugen (also Zeilenumbrüche zu machennurwenn ich sie will, oder setze dieses abschließende "," nicht)
  • oder wie kann ich die obigen Schritte in einem anderen Filter skripten?

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

verwandte Informationen