Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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 Nov 1 '10 at 0:55

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

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

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

grep -src HOST /etc/*

Example output:


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

Its not one command, but it is one line

something like

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

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
grep -c HOST *

… should do it.

share|improve this answer

You must log in to answer this question.