如何尾部和 grep 日志文件,组合成一行并作为参数传递给另一个命令

如何尾部和 grep 日志文件,组合成一行并作为参数传递给另一个命令

使用以下命令,我设法获取下面的错误消息(共 3 行)。

$ tail -f -n 0 error.log | grep -A2 --line-buffered "Internal server error"
! @79884flo2 - Internal server error, for (GET) [/] ->

play.api.UnexpectedException: Unexpected exception[Missing: No configuration setting found for key init.default]

尝试了一些技术将日志组合成一行并成功:

  1. xargs

    tail -f -n 0 error.log | grep -A2 --line-buffered "error" | xargs -I @ printf "%s" "@"
    
  2. awk

    tail -f -n 0 error.log | grep -A2 --line-buffered "error" | awk '{ printf("%s ", $0); }'
    
  3. paste:

    tail -f -n 0 error.log | grep -A2 --line-buffered "error" | paste -d " " - - -
    

接下来我想使用telegram-notify命令将输出发送到电报:

telegram-notify --error --title "<title>" --text "<output from above command goes here>"

目前我能做的最好的事情就是使用xargs电报单独发送日志的每一行。

tail -f -n 0 error.log | grep -A2 --line-buffered "error" | xargs -L 3 -I {} telegram-notify --error --title "<title>" --text "{}"

请您指教:

  1. 我上面尝试过的三个xargs, awk,中的哪一个命令paste应该用于组合行?

  2. 如何进一步通过管道或将输出从//xargs传递到命令选项awkpastetelegram-notify--text

相关内容