Sed

將 JSON 中的鍵值對grep 為 CLI

  • June 17, 2020

我有一個帶有 JSON 的大數據日誌。一個 JSON 元素如下所示:

{
 "context": {
   "callback": {
     "Data": {
       "LastSessionTime": "2020-06-07T09:16:19Z",
       "TrackingEnabled": "1",
       "Language": "en"
     }
   }
 }
}

我想 grep 所有包含 “TrackingEnabled” : “1” 的行並將其保存到另一個文件中。我也想使用以下命令:

grep "TrackingEnabled" : "1" data.log > tracked.log
grep -v "TrackingEnabled" : "1" data.log > untracked.log

但我收到錯誤:

grep: :: No such file or directory
grep: 1: No such file or directory

有人可以提出解決方案嗎?

grepregex是解析json的正確工具,請改用jq

jq -r '
    .context.callback.Data |
    select(.TrackingEnabled == "1") |
    "TrackingEnabled: " + .TrackingEnabled
' file.json

輸出

TrackingEnabled: 1

以及來自評論的新要求:

jq -r '
   [
      .context.callback.Data |
      select(.TrackingEnabled == "1") |
      "TrackingEnabled: " + .TrackingEnabled, .LastSessionTime
   ]
' file.json

輸出

[
 "TrackingEnabled: 1",
 "2020-06-07T09:16:19Z"
]

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