Print this page
3737 grep does not support -H option
3759 egrep(1) and fgrep(1) -s flag does not hide -c output
Reviewed by: Albert Lee <trisk@nexenta.com>
Reviewed by: Andy Stormont <andyjstormont@gmail.com>
*** 30,42 ****
/* All Rights Reserved */
/* Copyright (c) 1987, 1988 Microsoft Corporation */
/* All Rights Reserved */
! %{
! #pragma ident "%Z%%M% %I% %E% SMI"
! %}
/*
* egrep -- print lines containing (or not containing) a regular expression
*
* status returns:
--- 30,42 ----
/* All Rights Reserved */
/* Copyright (c) 1987, 1988 Microsoft Corporation */
/* All Rights Reserved */
! /*
! * Copyright 2013 Damian Bogel. All rights reserved.
! */
/*
* egrep -- print lines containing (or not containing) a regular expression
*
* status returns:
*** 59,68 ****
--- 59,70 ----
#include <widec.h>
#include <stdlib.h>
#include <limits.h>
#include <locale.h>
+ #define STDIN_FILENAME gettext("(standard input)")
+
#define BLKSIZE 512 /* size of reported disk blocks */
#define EBUFSIZ 8192
#define MAXLIN 350
#define NCHARS 256
#define MAXPOS 4000
*** 108,122 ****
long long lnum;
int bflag;
int cflag;
int eflag;
int fflag;
int hflag;
int iflag;
int lflag;
int nflag;
! int sflag;
int vflag;
int nfile;
long long blkno;
long long tln;
int nsucc;
--- 110,125 ----
long long lnum;
int bflag;
int cflag;
int eflag;
int fflag;
+ int Hflag;
int hflag;
int iflag;
int lflag;
int nflag;
! int qflag;
int vflag;
int nfile;
long long blkno;
long long tln;
int nsucc;
*** 642,652 ****
}
return;
}
}
! #define USAGE "[ -bchilnsv ] [ -e exp ] [ -f file ] [ strings ] [ file ] ..."
int
main(int argc, char **argv)
{
char c;
--- 645,655 ----
}
return;
}
}
! #define USAGE "[ -bchHilnsqv ] [ -e exp ] [ -f file ] [ strings ] [ file ] ..."
int
main(int argc, char **argv)
{
char c;
*** 658,668 ****
#if !defined(TEXT_DOMAIN) /* Should be defined by cc -D */
#define TEXT_DOMAIN "SYS_TEST" /* Use this only if it weren't. */
#endif
(void) textdomain(TEXT_DOMAIN);
! while((c = getopt(argc, argv, "ybcie:f:hlnvs")) != -1)
switch(c) {
case 'b':
bflag++;
continue;
--- 661,671 ----
#if !defined(TEXT_DOMAIN) /* Should be defined by cc -D */
#define TEXT_DOMAIN "SYS_TEST" /* Use this only if it weren't. */
#endif
(void) textdomain(TEXT_DOMAIN);
! while((c = getopt(argc, argv, "ybcie:f:Hhlnvsq")) != -1)
switch(c) {
case 'b':
bflag++;
continue;
*** 684,712 ****
gettext("egrep: can't open %s\n"), optarg);
exit(2);
}
continue;
case 'h':
hflag++;
continue;
case 'y':
case 'i':
iflag++;
continue;
case 'l':
lflag++;
continue;
case 'n':
nflag++;
continue;
! case 's':
! sflag++;
continue;
case 'v':
vflag++;
continue;
--- 687,724 ----
gettext("egrep: can't open %s\n"), optarg);
exit(2);
}
continue;
+ case 'H':
+ if (!lflag) /* H is excluded by l as in GNU grep */
+ Hflag++;
+ hflag = 0; /* H excludes h */
+ continue;
+
case 'h':
hflag++;
+ Hflag = 0; /* h excludes H */
continue;
case 'y':
case 'i':
iflag++;
continue;
case 'l':
lflag++;
+ Hflag = 0; /* l excludes H */
continue;
case 'n':
nflag++;
continue;
! case 'q':
! case 's': /* Solaris: legacy option */
! qflag++;
continue;
case 'v':
vflag++;
continue;
*** 797,816 ****
gettext("egrep: can't open %s\n"), file);
badbotch=1;
return;
}
} else {
- file = "<stdin>";
f = stdin;
}
lnum = 1;
tln = 0;
if((count = read(fileno(f), buf, EBUFSIZ)) <= 0) {
fclose(f);
! if (cflag) {
! if (nfile>1 && !hflag)
fprintf(stdout, "%s:", file);
fprintf(stdout, "%lld\n", tln);
}
return;
}
--- 809,828 ----
gettext("egrep: can't open %s\n"), file);
badbotch=1;
return;
}
} else {
f = stdin;
+ file = STDIN_FILENAME;
}
lnum = 1;
tln = 0;
if((count = read(fileno(f), buf, EBUFSIZ)) <= 0) {
fclose(f);
! if (cflag && !qflag) {
! if (Hflag || (nfile > 1 && !hflag))
fprintf(stdout, "%s:", file);
fprintf(stdout, "%lld\n", tln);
}
return;
}
*** 900,922 ****
}
succ = vflag;
break;
}
}
! if(succ) {
nsucc = 1;
! if (cflag) tln++;
! else if (sflag)
! ; /* ugh */
! else if (lflag) {
! printf("%s\n", file);
fclose(f);
return;
}
! else {
! if (nfile > 1 && !hflag)
! printf(gettext("%s:"), file);
if (bflag) {
nchars = blkno - (buf + count - ptrend) - 2;
if(nlflag)
nchars++;
printf("%lld:", nchars/BLKSIZE);
--- 912,934 ----
}
succ = vflag;
break;
}
}
! if (succ) {
nsucc = 1;
! if (lflag || qflag) {
! if (!qflag)
! (void) printf("%s\n", file);
fclose(f);
return;
}
! if (cflag) {
! tln++;
! } else {
! if (Hflag || (nfile > 1 && !hflag))
! printf("%s:", file);
if (bflag) {
nchars = blkno - (buf + count - ptrend) - 2;
if(nlflag)
nchars++;
printf("%lld:", nchars/BLKSIZE);
*** 942,954 ****
lnum++;
if (reinit == 1)
clearg();
}
fclose(f);
! if (cflag) {
! if (nfile > 1 && !hflag)
! printf(gettext("%s:"), file);
printf("%lld\n", tln);
}
}
void
--- 954,966 ----
lnum++;
if (reinit == 1)
clearg();
}
fclose(f);
! if (cflag && !qflag) {
! if (Hflag || (nfile > 1 && !hflag))
! printf("%s:", file);
printf("%lld\n", tln);
}
}
void