grep how to suppress display of non-matched file?
Add
| grep -v ':0$'
Not very elegant but I think will do the job.
Adding -l
to your command will give you only matches but it will also suppress printing number of matches for each file.
Using grep -l
you will only get the files that contain at least one match.
Do you need information about how many matches there are in a file at all? Because the you could skip using -c
which is used to count the number of matches in a file.
edit: And like warlock said using -I
to suppress matches in binary files could also be a good idea.
That's the behavior exhibited by grep -c
.
Probably you have a file whose name starts with -
and contains a c
character and you're using GNU grep without setting the POSIXLY_CORRECT
environment variable.
Use:
grep -- delete *
or better:
grep delete ./*
--
marks the end of options so that that filename will not be considered as an option (with a POSIX grep, it wouldn't since the non-option delete
argument would have marked the end of options), but it wouldn't address the problem of a file called -
. The grep delete ./*
is more robust but has the drawback of outputting the extra ./
for matching files (though that may be considered a bonus since that helps identify file names that contain newline characters).