Get `grep` to not output file name

When I use grep -o to search in multiple files, it outputs each result prefixed with the file name. How can I prevent this prefix? I want the results without the file names.

Asked By: Ram Rachum

||

With the GNU implementation of grep (the one that also introduced -o) or compatible, you can use the -h option.

-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.

With other implementations, you can always concatenate the files with cat and grep that output:

cat ./*.txt | grep regexp

Or use sed or awk instead of grep:

awk '/regexp/' ./*.txt

(extended regexps like with grep -E).

sed '/regexp/!d/' ./*.txt

(basic regexps like with grep without -E. Many sed implementations now also support a -E option for extended regexps).

Answered By: sergut

With git grep, use the -h option to suppress file names:

git grep -h <pattern>

Note that the option --no-filename doesn’t work with git grep.

Answered By: Paul Rougieux
Categories: Answers Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.