How do I grep from a number of files and display the file name only?
When there is more than one file to search it will display file name by default:
grep "word" filename grep root /etc/*
Sample outputs:
/etc/bash.bashrc: See "man sudo_root" for details. /etc/crontab:17 * * * * root cd / && run-parts --report /etc/cron.hourly /etc/crontab:25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) /etc/crontab:47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) /etc/crontab:52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) /etc/group:root:x:0: grep: /etc/gshadow: Permission denied /etc/logrotate.conf: create 0664 root utmp /etc/logrotate.conf: create 0660 root utmp
The first name is file name (e.g., /etc/crontab, /etc/group). The -l option will only print filename if th
grep -l "string" filename grep -l root /etc/*
Sample outputs:
/etc/aliases /etc/arpwatch.conf grep: /etc/at.deny: Permission denied /etc/bash.bashrc /etc/bash_completion /etc/ca-certificates.conf /etc/crontab /etc/group
You can suppress normal output; instead print the name of each input file from which no output would normally have been printed:
grep -L "word" filename grep -L root /etc/*
Sample outputs:
/etc/apm /etc/apparmor /etc/apparmor.d /etc/apport /etc/apt /etc/avahi /etc/bash_completion.d /etc/bindresvport.blacklist /etc/blkid.conf /etc/bluetooth /etc/bogofilter.cf /etc/bonobo-activation /etc/brlapi.key
You should follow me on twitter here or grab rss feed to keep track of new changes.
This FAQ entry is 5 of 7 in the "Linux / UNIX grep Command Tutorial" series. Keep reading the rest of the series:







![HowTo: Use grep Command In Linux / UNIX [ Examples ]](http://s13.cyberciti.org/images/shared/rp/3/3.jpg)





{ 12 comments… read them below or add one }
for i in `ls` ; do
grep -q “whatever” $i && echo $i
done
Why ls? It will fail when you have file names with white spaces. A better way is to use wild cards:
what about
grep -rI “whatever” ./ | cut -d: -f1 | sort -u
nb it will fail on file containing “:” such as some perl man pages but…
…Or just add some proper form
for i in `ls` ; do
grep -q “whatever” “$i” && echo “$i”
done
or if you need to search all file and subdirs within a dir you can run the commands above. Just replace `ls` with `find . -type f`.
Or better yet, use xargs.
find . -type f | xargs grep htmlIf you want to deal with spaces etc…
find . -type f | xargs -I {} grep -H foo "{}"Dealing with space with a shorter form
find . -type f -print0 | xargs -0 grep foo
I agree, find is working great for me.
find -name *.log -uid 1000
You can find files only owned by uid. Nifty feature.
How do I grep if i am looking for a specfic percentage?
grep -w “68%-100% /usr/local/stage”
thanks in advance
ls | while read FILE; do echo “$FILE” done;
This handles whitespace and other nasties nicely.
how can i grep
CA
from filename AUZ_CA_EL.txt
cat AUZ_CA_EL.txt | grep “CA”
how do I know the location and file name form the result that grep shows?
I use command like cat * | grep
Now what I need is the location of the file name along withe the grep result.
Help anyone