Added support for the -c (count matches) option. Made it so it works just like
GNU grep.
This commit is contained in:
parent
6efc48c1ae
commit
8f122431f5
@ -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
25
grep.c
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user