Hi I wanna keep looking at a log file, but I also don't wanna see irrelevant stuff, I'm only interested in anything with "foobar" in it.

So if I was tailing the file I would do

 tail file | grep "foobar"

Now that I'm adding the -f option, is there a way to somehow only show the stuff that I want? using grep or other technique?


1 Answer 1


You almost wrote the answer, which is :

tail -f file.log | grep "foobar"

That's it.

  • 1
    Woah, you are right, I think I didn't expect this to work, I still don't, isn't piping supposed to happen when a command has finished execution? I guess this shows that it's not, it happens every time there an output, right?
    – user893730
    Jan 9, 2012 at 21:15
  • 3
    No it will launch the two programs in parallel, and the second one (grep) will exit as soon as tail's STDOUT closes. That's the whole point of pipes, data streaming :)
    – Ravachol
    Jan 10, 2012 at 9:57
  • 5
    When grep is the last line in the pipe, its output is line buffered, so you see the filtered output of tail -f live, rather than delayed. Note that if you were to use multiple grep commands, any whose output was piped would need a --line-buffered option (assuming GNU or BSD grep) in order to keep this behaviour.
    – ghoti
    Jul 4, 2013 at 6:44

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.