jsonターミナル出力の '\ t'と '\ n'を便利なものに変換する方法は?

jsonターミナル出力の '\ t'と '\ n'を便利なものに変換する方法は?

AWSからいくつかのJSONログを受け取りましたが、それをクリーンアップしたいと思います。彼らはこんな感じでした...

    {
        "ingestionTime": 1568961184459, 
        "timestamp": 1568961184430, 
        "message": "START RequestId: 0304cf0d-da16-4d01-b4de-da8d528144ac Version: $LATEST\n", 
        "eventId": "34989003600358241981666605756070906630881684882471780352", 
        "logStreamName": "2019/09/20/[$LATEST]71cac888c4a54d11b7e2c97108ad8ba1"
    }, 
    {
        "ingestionTime": 1568961199507, 
        "timestamp": 1568961184432, 
        "message": "2019-09-20T06:33:04.432Z\t0304cf0d-da16-4d01-b4de-da8d528144ac\tAttempting to subscribe John Doe ([email protected]) to newsletter...\n", 
        "eventId": "34989003600402843472063667020546010973018230982964936704", 
        "logStreamName": "2019/09/20/[$LATEST]71cac888c4a54d11b7e2c97108ad8ba1"
    }, 

それから...次を使って...

{
  "ingestionTime": 1568961184459,
  "timestamp": 1568961184430,
  "message": "START RequestId: 0304cf0d-da16-4d01-b4de-da8d528144ac Version: $LATEST\n",
  "eventId": "34989003600358241981666605756070906630881684882471780352",
  "logStreamName": "2019/09/20/[$LATEST]71cac888c4a54d11b7e2c97108ad8ba1"
}
{
  "ingestionTime": 1568961199507,
  "timestamp": 1568961184432,
  "message": "2019-09-20T06:33:04.432Z\t0304cf0d-da16-4d01-b4de-da8d528144ac\tAttempting to subscribe John Doe ([email protected]) to newsletter ...\n",
  "eventId": "34989003600402843472063667020546010973018230982964936704",
  "logStreamName": "2019/09/20/[$LATEST]71cac888c4a54d11b7e2c97108ad8ba1"
}

このコマンドは次のとおりです。aws logs filter-log-events --log-group-name /aws/lambda/$npm_package_name --region us-east-2 | jq '.events[]'

\tこれが実際にタブであり、\n最後のタブを削除できる場合は良いでしょう。または、各新しいタブのメッセージフィールドを複数の新しい行に分割します。

どうすればいいですか?私はbashについて十分に知りません。

ベストアンサー1

jqデフォルトでは、JSONでエンコードされた文字列が出力されます。

欲しい生の message文字列、使用、-rまたは--raw-output:

jq -r .message file.json

file.json表示中のJSONドキュメントの場合)これにより、特定の文字列のタブと改行文字が展開されます。

おすすめ記事