日々精進

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

tail -f の出力をjqで加工する

普通にtail -f | jq '.'のようにjqに渡してもうまくいかなかった。
tailからの出力を1行ずつシェルで切ってjqに渡してやらないといけない。
以下のようにwhile read line...コマンドを使うと1行ずつ渡せる。

tail -f app.log | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" | awk -F" - " '{ print $2 }' | while read line; do echo "$line" | jq '.' -c; done

参考:Combine tail -F and json - Stack Overflow