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?

user9517
  • 115,471
  • 20
  • 215
  • 297
wjimenez5271
  • 729
  • 2
  • 6
  • 16

2 Answers2

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.

tylerl
  • 15,055
  • 7
  • 51
  • 72
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)

robbyt
  • 1,642
  • 3
  • 14
  • 26