diff options
author | wosch <wosch@FreeBSD.org> | 1996-09-27 19:44:46 +0000 |
---|---|---|
committer | wosch <wosch@FreeBSD.org> | 1996-09-27 19:44:46 +0000 |
commit | 75b1ede7c4efa5dab928435c5a17025962763a6d (patch) | |
tree | c7ceea5562d06dba74895dc5fb62b189fa29310d /gnu/usr.bin/grep | |
parent | 5b3a6e6fa1d4ca3a20d7ca5f895760f15b15e389 (diff) | |
download | FreeBSD-src-75b1ede7c4efa5dab928435c5a17025962763a6d.zip FreeBSD-src-75b1ede7c4efa5dab928435c5a17025962763a6d.tar.gz |
grep -q pattern file
search 'pattern' in whole file 'file', from top to bottom. This is
not necessary; if grep found 'pattern' it can stop further searching
in file 'file'.
Example:
$ time ./grep-old -q Adam /usr/share/dict/*
1.93 real 1.05 user 0.85 sys
$ time ./grep-new -q Adam /usr/share/dict/*
0.14 real 0.06 user 0.06 sys
Diffstat (limited to 'gnu/usr.bin/grep')
-rw-r--r-- | gnu/usr.bin/grep/grep.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/gnu/usr.bin/grep/grep.c b/gnu/usr.bin/grep/grep.c index ae30167..0353e26 100644 --- a/gnu/usr.bin/grep/grep.c +++ b/gnu/usr.bin/grep/grep.c @@ -343,6 +343,7 @@ static int out_line; /* Print line numbers. */ static int out_byte; /* Print byte offsets. */ static int out_before; /* Lines of leading context. */ static int out_after; /* Lines of trailing context. */ +static int count_matches; /* print a count of matching lines */ /* Internal variables to keep track of byte count, context, etc. */ static size_t totalcc; /* Total character count before bufbeg. */ @@ -589,6 +590,9 @@ grep(fd) nlines += grepbuf(beg, lim); if (pending) prpending(lim); + /* optimization */ + if (nlines && out_quiet && !count_matches) + return(nlines); } i = 0; beg = lim; @@ -659,7 +663,7 @@ main(argc, argv) { char *keys; size_t keycc, oldcc, keyalloc; - int keyfound, count_matches, no_filenames, list_files, suppress_errors; + int keyfound, no_filenames, list_files, suppress_errors; int opt, cc, desc, count, status; FILE *fp; extern char *optarg; |