Piping tail output though grep twice

前端 未结 2 1227
闹比i
闹比i 2020-11-27 18:04

Going with a typical Apache access log, you can run:

tail -f access_log | grep \"127.0.0.1\"

Which will only show you the logs (as they are

相关标签:
2条回答
  • 2020-11-27 18:30

    This is the result of buffering, it will eventually print when enough data is available.

    Use the --line-buffered option as suggested by Shawn Chin or if stdbuf is available you can get the same effect with:

    tail -f access_log | stdbuf -oL grep "127.0.0.1" | grep -v ".css"
    
    0 讨论(0)
  • 2020-11-27 18:44

    I believe the problem here is that the first grep is buffering the output which means the second grep won't see it until the buffer is flushed.

    Try adding the --line-buffered option on your first grep:

    tail -f access_log | grep --line-buffered "127.0.0.1" | grep -v ".css"
    

    For more info, see "BashFAQ/009 -- What is buffering? Or, why does my command line produce no output: tail -f logfile | grep 'foo bar' | awk ..."

    0 讨论(0)
提交回复
热议问题