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?
grep
can take file names as a parameter.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.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)