I am trying to find some keywords in my /var/log directory, so using

cd /var/log cat * | grep keyword

I find the string is in that directory and see the lines it exists on, but don't know which file it came from. How can I locate the string, and see the file it cat from?

link|improve this question

58% accept rate
feedback

2 Answers

up vote 4 down vote accepted

grep can take file names as a parameter.

cd /var/log
grep keyword *

And if you grep from more than one file at a time, the filename from which the line came from will be printed along with the found line.

If you only supply 1 file name to grep, but you want to show the name on the file anyway, pass the -H option to grep -- useful if you use a globbing (e.g. *.txt) at the command line and don't know how many files will be searched).

If you want to show line numbers as well, that's the -n option.

link|improve this answer
Awesome, thanks! – wjimenez5271 Jul 23 '11 at 20:37
feedback

find /var/log -type f | xargs grep -H

or

find /var/log -type f -name \*log | xargs grep -H

or (much slower than xargs)

find /var/log -type f -exec grep -H {} \;

and for bonus points, grep -i will make the search case-insensitive (but slower)

link|improve this answer
or better yet: grep -r "search phrase" /var/log/* – robbyt Nov 21 '11 at 17:05
feedback

Your Answer

 
or
required, but never shown

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