Como posso melhorar ou encapsular meu script sed?

0

Eu instrumentei uma construção mvn para emitir dados de criação de perfil, o que eu quero analisar mais tarde. Portanto, eu fiz o script sed abaixo, para gerar json-data da saída do profilers. Eu chamo o script com

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

Produz uma lista aninhada de json-objects ("projects"), mas cada lista é terminada com um ",".

Para criar um arquivo json válido, eu executo os seguintes passos no meu editor favorito.

  • Juntando tudo a uma linha
  • insira um objeto de quebra prefixando "{\" lista \ ": [" e acrescentando "]}" ao conteúdo inteiro.
  • substitua todas as ocorrências de ",]" (listas incorretamente terminadas) por "]"
  • insira uma quebra de linha após cada projeto, para evitar falhas no JSON-parse devido à linha excessivamente longa.

Eu executo essas etapas manualmente atualmente e quero ter esse script também.

  • Como eu posso obter o script sed para produzir json válido (ou seja, fazer o linebreaks somente quando eu quiser, ou não colocar esse término ",")
  • ou como posso criar scripts nas etapas acima em outro filtro?

    /[PROFILER]/ s/\[PROFILER\] \(.*\)ms : Task (project-execute new-mvifp:\(.*\):\(.*\) (  task-segment: \[\(.*\)\] )) started./{"":{"timestamp":,"project":"","tasks":"","branch":"","segments":[/p
    /[PROFILER]/ s/\[PROFILER\] \(.*\)ms : Task (Segment:\(.*\)) started./{"":{"timestamp":,"segment":"","mojos":[/p
    /[PROFILER]/ s/\[PROFILER\] \(.*\)ms : Task (mojo-execute \(.*\) {execution: \(.*\)}) started./{"":{"timestamp":,"mojo":"","execution":"",/p
    /[PROFILER]/ s/\[PROFILER\] \(.*\)ms : Task (mojo-execute \(.*\) {execution: \(.*\)}) finished.*duration \(.*\)ms./"duration":}},/p
    /[PROFILER]/ s/\[PROFILER\] \(.*\)ms : Task (Segment:\(.*\)) finished.*duration \(.*\)ms./],"duration":}},/p
    /[PROFILER]/ s/\[PROFILER\] \(.*\)ms : Task (project-execute new-mvifp:\(.*\):\(.*\) (  task-segment: \[\(.*\)\] )) finished.*duration \(.*\)ms./],"duration":}},/p
    
por Bastl 07.02.2012 / 10:51

0 respostas