283

How do you grep and only return the matching line? i.e. The path/filename is omitted from the results.

In this case I want to look in all .bar files in the current directory, searching for the term FOO

find . -name '*.bar' -exec grep -Hn FOO {} \;
codeforester
  • 39,467
  • 16
  • 112
  • 140
Allan Thomas
  • 3,481
  • 5
  • 26
  • 29

3 Answers3

459

No need to find. If you are just looking for a pattern within a specific directory, this should suffice:

grep -hn FOO /your/path/*.bar

Where -h is the parameter to hide the filename, as from man grep:

-h, --no-filename

Suppress the prefixing of file names on output. This is the default when there is only one file (or only standard input) to search.

Note that you were using

-H, --with-filename

Print the file name for each match. This is the default when there is more than one file to search.

Dominic Rodger
  • 97,747
  • 36
  • 197
  • 212
fedorqui
  • 275,237
  • 103
  • 548
  • 598
8

Just replace -H with -h. Check man grep for more details on options

find . -name '*.bar' -exec grep -hn FOO {} \;
jkshah
  • 11,387
  • 6
  • 35
  • 45
6

From the man page:

-h, --no-filename
    Suppress the prefixing of file names on output. This is the default when there
    is only one file (or only standard input) to search.
Zoe
  • 27,060
  • 21
  • 118
  • 148
TC1
  • 1
  • 3
  • 20
  • 31