Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

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"?

I should list only the files with matches and suppress any error messages.

share|improve this question

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

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

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
add comment

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.

share|improve this answer
add comment

Its not one command, but it is one line

something like

 grep -r ',,HOST' . | wc -l
share|improve this answer
add comment

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
share|improve this answer
add comment
grep -c HOST *

… should do it.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.