複数行を「sed」に置き換えてJSONに変換するには?

複数行を「sed」に置き換えてJSONに変換するには?
{
  "auth": 'log',
  "appid": 21,
  "custid": "599c1f910f53ada8468b4567",
  "hwid": "59e719ba0f53adfd6a8b4597"
}

24/10/2017 12:44:24
--------------------------------------------------------------------------------
{
  "auth": 'log',
  "appid": 21,
  "custid": "599c1f910f53ada8468b4567",
  "hwid": "59e719ba0f53adfd6a8b4597"
}

ファイルの一部のログ行で区切られたjsonのリストを単一のjsonに変換する必要があります。これまで私はこれを試しました:

tac tst.txt | sed '/---------/I,+2 d' | tac > out.json

ログ行を削除しましたが、カンマで置き換えてリストに追加する必要があります。どうすればいいですか?それともPythonを使用する代替方法はありますか?

ベストアンサー1

sed+jq解決策:

sed -E "/^(---|[0-9][0-9])/d; s/'([^']+)'/\"\1\"/" tst.txt | jq -s '' out.json
  • /^(---|[0-9][0-9])/d---- または2桁で始まる不要な行を削除します。

  • s/'([^']+)'/\"\1\"/"- 一重引用符で囲まれた値を有効なJSON値で置き換えます(二重引用符で囲みます)。

  • jq -s ''- 入力内のすべてのJSONオブジェクトに対してフィルタを実行するのではなく、入力ストリーム全体を1つの大きな配列に読み込みます。


コンテンツout.json:

[
  {
    "auth": "log",
    "appid": 21,
    "custid": "599c1f910f53ada8468b4567",
    "hwid": "59e719ba0f53adfd6a8b4597"
  },
  {
    "auth": "log",
    "appid": 21,
    "custid": "599c1f910f53ada8468b4567",
    "hwid": "59e719ba0f53adfd6a8b4597"
  }
]

おすすめ記事