Added support for the -c (count matches) option. Made it so it works just like

GNU grep.
This commit is contained in:
Mark Whitley 2000-07-18 18:37:01 +00:00
parent 6efc48c1ae
commit 8f122431f5
2 changed files with 44 additions and 6 deletions

View File

@ -35,6 +35,7 @@ extern int errno; /* for use with strerror() */
static int ignore_case = 0; static int ignore_case = 0;
static int print_filename = 0; static int print_filename = 0;
static int print_line_num = 0; static int print_line_num = 0;
static int print_count_only = 0;
static int be_quiet = 0; static int be_quiet = 0;
static int invert_search = 0; static int invert_search = 0;
static int suppress_err_msgs = 0; static int suppress_err_msgs = 0;
@ -75,14 +76,29 @@ static void grep_file(FILE *file)
nmatches++; nmatches++;
print_matched_line(line, linenum); if (!print_count_only)
print_matched_line(line, linenum);
} else if (ret == REG_NOMATCH && invert_search) { } else if (ret == REG_NOMATCH && invert_search) {
print_matched_line(line, linenum);
nmatches++;
if (!print_count_only)
print_matched_line(line, linenum);
} }
free(line); 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) extern int grep_main(int argc, char **argv)
@ -95,7 +111,7 @@ extern int grep_main(int argc, char **argv)
usage(grep_usage); usage(grep_usage);
/* do normal option parsing */ /* do normal option parsing */
while ((opt = getopt(argc, argv, "iHhnqvs")) > 0) { while ((opt = getopt(argc, argv, "iHhnqvsc")) > 0) {
switch (opt) { switch (opt) {
case 'i': case 'i':
ignore_case++; ignore_case++;
@ -118,6 +134,9 @@ extern int grep_main(int argc, char **argv)
case 's': case 's':
suppress_err_msgs++; suppress_err_msgs++;
break; break;
case 'c':
print_count_only++;
break;
} }
} }

25
grep.c
View File

@ -35,6 +35,7 @@ extern int errno; /* for use with strerror() */
static int ignore_case = 0; static int ignore_case = 0;
static int print_filename = 0; static int print_filename = 0;
static int print_line_num = 0; static int print_line_num = 0;
static int print_count_only = 0;
static int be_quiet = 0; static int be_quiet = 0;
static int invert_search = 0; static int invert_search = 0;
static int suppress_err_msgs = 0; static int suppress_err_msgs = 0;
@ -75,14 +76,29 @@ static void grep_file(FILE *file)
nmatches++; nmatches++;
print_matched_line(line, linenum); if (!print_count_only)
print_matched_line(line, linenum);
} else if (ret == REG_NOMATCH && invert_search) { } else if (ret == REG_NOMATCH && invert_search) {
print_matched_line(line, linenum);
nmatches++;
if (!print_count_only)
print_matched_line(line, linenum);
} }
free(line); 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) extern int grep_main(int argc, char **argv)
@ -95,7 +111,7 @@ extern int grep_main(int argc, char **argv)
usage(grep_usage); usage(grep_usage);
/* do normal option parsing */ /* do normal option parsing */
while ((opt = getopt(argc, argv, "iHhnqvs")) > 0) { while ((opt = getopt(argc, argv, "iHhnqvsc")) > 0) {
switch (opt) { switch (opt) {
case 'i': case 'i':
ignore_case++; ignore_case++;
@ -118,6 +134,9 @@ extern int grep_main(int argc, char **argv)
case 's': case 's':
suppress_err_msgs++; suppress_err_msgs++;
break; break;
case 'c':
print_count_only++;
break;
} }
} }