diff options
author | Mark Whitley | 2000-07-18 18:37:01 +0000 |
---|---|---|
committer | Mark Whitley | 2000-07-18 18:37:01 +0000 |
commit | 8f122431f5a6c7dc2f88e86989876ba49e8192ba (patch) | |
tree | 8e0b4ebb364b384e4ddc547df9c984c2a39d5793 | |
parent | 6efc48c1aebfc7bebd05c6f9c21cc0f9014abbd0 (diff) | |
download | busybox-8f122431f5a6c7dc2f88e86989876ba49e8192ba.zip busybox-8f122431f5a6c7dc2f88e86989876ba49e8192ba.tar.gz |
Added support for the -c (count matches) option. Made it so it works just like
GNU grep.
-rw-r--r-- | findutils/grep.c | 25 | ||||
-rw-r--r-- | grep.c | 25 |
2 files changed, 44 insertions, 6 deletions
diff --git a/findutils/grep.c b/findutils/grep.c index a2c07c5..10ad76c 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; } } @@ -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; } } |