Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Piping tail -f to cut to sed produces no output

I try to display a named pipe in a Terminal with this command:

tail -f textFile | cut -d " " -f 3- | sed -e "s/a/g&g/"

For some reason this produces no output.

It does work as expected if the -f is removed:

tail textFile | cut -d " " -f 3- | sed -e "s/a/g&g/"

or the cut statement is removed:

tail -f textFile | sed -e "s/a/g&g/"

or the sed statement is removed:

tail -f textFile | cut -d " " -f 3-

Only when all of these three things are there together, it suddenly doesn't produce any output anymore. The order of sed and cut don't make a difference. All of this makes it hard for me to blame the input or output buffering behaviour of any one or pair of these programms.

A possible solution to get the required functionality would be a while read line structure, but I would like to avoid initializing a command for every line, if at all possible.

like image 928
cyborgx7 Avatar asked Oct 16 '25 18:10

cyborgx7


1 Answers

I was experiencing something similar with a ping command that I wanted to filter.

The following webpage seems to explain what the issue is (stdio buffering) http://www.pixelbeat.org/programming/stdio_buffering/

The website points to a solution which involves disabling the buffering with the "stdbuf" command

tail -f filename | stdbuf -o0 cut -d " " -f 3- | sed -e "s/a/g&g/"

The above works well for me, and removing "stdbuf -o0" causes no output to be displayed.

>stdbuf --help
Usage: stdbuf OPTION... COMMAND
Run COMMAND, with modified buffering operations for its standard streams.

Mandatory arguments to long options are mandatory for short options too.
  -i, --input=MODE   adjust standard input stream buffering
  -o, --output=MODE  adjust standard output stream buffering
  -e, --error=MODE   adjust standard error stream buffering
      --help     display this help and exit
      --version  output version information and exit
like image 191
SteveS Avatar answered Oct 18 '25 11:10

SteveS



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!