If you want to know the name of files containing a special string, grep -c
is your friend. But you also get names of files not containing your string (with count = 0). If you only want the names of files containing “mystring”, awk
can help you:
grep -c "mystring" * | awk ' !/:0/ '
And if you don’t even want the number of times “mystring” appears (on 1 line):
grep -c "mystring" * | awk ' !/:0/ '| awk '{split($0, a, ":"); print a[1]}'
Any other ideas?
Your 2 awk calls can easily be grouped:
| awk ‘ !/:0/{split($0, a, “:”); print a[1]}’
or shorter, taking advantage of the natural capabilities of awk to parse a line, here we tell awk that our field separator is “:” :
| awk -F: ‘ $2 != 0 {print $1}’
which is equivalent to
| awk -F: ‘ $2 {print $1}’
But I kept the best for the end ๐
grep -r -l “mystring” .
does the job, without awk ๐
I prefer “-r .” which is recursing, rather than *
-l is displaying the matching files, isn’t it what you wanted?
Thanks, Philippe. I really like the one you gave me via jabber:
grep -c “mystring” * | grep -v “:0$”
Only the filename, no count,
$ awk ‘/mystring/ {print FILENAME}’ * | sort | uniq
$ awk ‘/mystring/ {print FILENAME}’ * | awk ‘ !x[$0]++’
I liked the above “grep -r -l ” solution.
http://unstableme.blogspot.com