Here is my question I need help with. This has to also show the line count. I can get it to show the files but not the line count.

What is the single command used to identify only the matching count of all lines within files under the /etc directory that contain the word „HOST? List only the files with matches and suppress any error messages.

link|improve this question
2  
Looks like homework?! – Michael Oct 31 '10 at 22:06
1  
man grep, look for count – mykhal Oct 31 '10 at 23:11
you should add grep as a tag, it's quite relevant! – barlop Nov 1 '10 at 1:05
feedback

migrated from stackoverflow.com Nov 1 '10 at 0:55

This question came from our site for professional and enthusiast programmers.

4 Answers

To count the matches, listing only the filename(s) and count:

grep -src HOST /etc/*

Example output:

/etc/postfix/postfix-files:1
/etc/security/pam_env.conf:6
/etc/X11/app-defaults/Ddd.3.3.11:1
/etc/X11/app-defaults/Ddd:1
/etc/zsh/zshrc:0
/etc/zsh/zshenv:0

The -c option supresses normal output and prints a match count for each file.

If you'd like to suppress the files with zero counts:

grep -src HOST /etc/* | grep -v ':0$'

To print the line number (-n) and file name (-H) for each matching line for any number of input files:

grep -srnH HOST /etc/*

Example output:

/etc/lynx-cur/lynx.cfg:254:.h2 LYNX_HOST_NAME
/etc/lynx-cur/lynx.cfg:255:# If LYNX_HOST_NAME is defined here or in userdefs.h, it will be
/etc/X11/app-defaults/Ddd.3.3.11:8005:    DDD 3.3.11 (@THEHOST@) gets @CAUSE@\n\
/etc/X11/app-defaults/Ddd:8010:    DDD 3.3.12 (@THEHOST@) gets @CAUSE@\n\

The option -r causes grep to recursively search files in each subdirectory at all levels under the specified directory. The -s option suppresses error messages.

To suppress matches of binary files, use the -I option.

See man grep for more information.

link|improve this answer
feedback

Its not one command, but it is one line

something like

 grep -r ',,HOST' . | wc -l
link|improve this answer
feedback

The question is worded a little odd. First it asks for the amount of lines that match in all the files, then it wants you to list the file names.

To count the matching lines in all files:

grep -R "HOST" /etc 2> /dev/null | wc -l

To list the file names:

grep -Rl "HOST" /etc 2> /dev/null
link|improve this answer
feedback

grep -c HOST *

Should do it

link|improve this answer
feedback

Your Answer

 
or
required, but never shown