2

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?

2 Answers 2

4

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.

0
0

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)

1
  • or better yet: grep -r "search phrase" /var/log/*
    – robbyt
    Nov 21, 2011 at 17:05

You must log in to answer this question.

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