日々精進

新しく学んだことを書き留めていきます

logをjqに読み込ませると、「parse error: Invalid numeric literal at〜」エラー

エラーの原因は、文字列はJSON形式になっていないこと。jqに渡した文字列を一旦ファイルに保存し、catで表示しても普通にJSON形式になっているように見えた。
stringsコマンドで表示すると以下のようにへんな文字列が頭にくっついていた。

strings file #=> [39m{"updateDatetime":"2014-09-25 08:52:31 +0000", ...

これは、コンソールに色をつけるための文字列。
以下の記事にあるように、「\033[32m 〜 \033[39m」のような文字列で囲むとその範囲の文字に色がつく。
consoleを簡単に色付けするモジュールのcoloを作った - from scratch
とりあえずsedでこの文字列を取り除くことで解決した。
以下のパターンでcolor codeを取り除ける。

sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"

参考:Remove color codes (special characters) with sed | commandlinefu.com