grep with continuous pipe does not work

前端 未结 2 938
我寻月下人不归
我寻月下人不归 2021-01-19 07:55

(maybe it is the \"tcpflow\" problem)

I write a script to monitoring http traffic, and I install tcpflow, then grep

it works (a

相关标签:
2条回答
  • 2021-01-19 08:39

    I think the problem is because of stdio buffering, you need to use GNU stdbuf before calling grep,

    sudo tcpflow -p -c -i eth0 port 80 2>/dev/null | stdbuf -o0 grep '^Host: '
    

    With the -o0, it basically means the output (stdout) stream from tcpflow will be unbuffered. The default behavior will be to automatically buffer up data into 40961 byte chunks before sending to next command in pipeline, which is what overriden using stdbuf


    1. Refer this nice detail into the subject.

    0 讨论(0)
  • 2021-01-19 08:40

    To grep a continuous stream use --line-buffered option:

    sudo tcpflow -p -c -i eth0 port 80 2> /dev/null | grep --line-buffered '^Host'
    

    --line-buffered

    Use line buffering on output. This can cause a performance penalty.


    Some reflections about buffered outputting(stdbuf tool is also mentioned):

    Pipes, how do data flow in a pipeline?

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