summaryrefslogtreecommitdiff
path: root/findutils
diff options
context:
space:
mode:
authorMark Whitley2000-07-18 18:37:01 +0000
committerMark Whitley2000-07-18 18:37:01 +0000
commit8f122431f5a6c7dc2f88e86989876ba49e8192ba (patch)
tree8e0b4ebb364b384e4ddc547df9c984c2a39d5793 /findutils
parent6efc48c1aebfc7bebd05c6f9c21cc0f9014abbd0 (diff)
downloadbusybox-8f122431f5a6c7dc2f88e86989876ba49e8192ba.zip
busybox-8f122431f5a6c7dc2f88e86989876ba49e8192ba.tar.gz
Added support for the -c (count matches) option. Made it so it works just like
GNU grep.
Diffstat (limited to 'findutils')
-rw-r--r--findutils/grep.c25
1 files changed, 22 insertions, 3 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;
}
}