aboutsummaryrefslogtreecommitdiff
path: root/findutils/grep.c
diff options
context:
space:
mode:
Diffstat (limited to 'findutils/grep.c')
-rw-r--r--findutils/grep.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/findutils/grep.c b/findutils/grep.c
index a2c07c523..10ad76c46 100644
--- a/findutils/grep.c
+++ b/findutils/grep.c
@@ -35,6 +35,7 @@ extern int errno; /* for use with strerror() */
static int ignore_case = 0;
static int print_filename = 0;
static int print_line_num = 0;
+static int print_count_only = 0;
static int be_quiet = 0;
static int invert_search = 0;
static int suppress_err_msgs = 0;
@@ -75,14 +76,29 @@ static void grep_file(FILE *file)
nmatches++;
- print_matched_line(line, linenum);
+ if (!print_count_only)
+ print_matched_line(line, linenum);
} else if (ret == REG_NOMATCH && invert_search) {
- print_matched_line(line, linenum);
+
+ nmatches++;
+
+ if (!print_count_only)
+ print_matched_line(line, linenum);
}
free(line);
}
+
+ /* special-case post processing */
+ if (print_count_only) {
+ if (print_filename)
+ printf("%s:", cur_file);
+ printf("%i\n", nmatches);
+ }
+
+ /* reset number of matches found to zero */
+ nmatches = 0;
}
extern int grep_main(int argc, char **argv)
@@ -95,7 +111,7 @@ extern int grep_main(int argc, char **argv)
usage(grep_usage);
/* do normal option parsing */
- while ((opt = getopt(argc, argv, "iHhnqvs")) > 0) {
+ while ((opt = getopt(argc, argv, "iHhnqvsc")) > 0) {
switch (opt) {
case 'i':
ignore_case++;
@@ -118,6 +134,9 @@ extern int grep_main(int argc, char **argv)
case 's':
suppress_err_msgs++;
break;
+ case 'c':
+ print_count_only++;
+ break;
}
}