sed スクリプトを改善またはラップするにはどうすればよいですか?

sed スクリプトを改善またはラップするにはどうすればよいですか?

私は、後で分析したいプロファイリングデータを出力するために、mvn buildをインストルメントしました。そこで、プロファイラの出力からjsonデータを生成するために、以下のsedスクリプトを作成しました。スクリプトを次のように呼び出します。

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

これは、json オブジェクト (「プロジェクト」) のネストされたリストを生成しますが、各リストは「,」で終了します。

これから有効な json ファイルを作成するには、お気に入りのエディターで次の手順を実行します。

  • すべてを1つの線に結合する
  • コンテンツ全体の先頭に「{\"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
    

関連情報