Sed

如何用“sed”替換多行並轉換為 JSON?

  • October 27, 2017
{
 "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 有什麼替代方法?

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 對象執行過濾器,而是將整個輸入流讀入一個大數組

內容out.json

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

引用自:https://unix.stackexchange.com/questions/400154