32

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?

2

1 Answer 1

49

You almost wrote the answer, which is :

tail -f file.log | grep "foobar"

That's it.

3
  • 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
  • 6
    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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .