Implement a -H flag for grep, useful for combining e.g. find and grep.

Can anyone commit it?

Index: grep.1
===================================================================
RCS file: /cvs/src/usr.bin/grep/grep.1,v
retrieving revision 1.39
diff -u -r1.39 grep.1
--- grep.1      3 Sep 2010 11:09:28 -0000       1.39
+++ grep.1      21 Feb 2011 12:29:41 -0000
@@ -38,7 +38,7 @@
 .Sh SYNOPSIS
 .Nm grep
 .Bk -words
-.Op Fl abcEFGhIiLlnqRsUVvwxZ
+.Op Fl abcEFGHhIiLlnqRsUVvwxZ
 .Op Fl A Ar num
 .Op Fl B Ar num
 .Op Fl C Ns Op Ar num
@@ -184,6 +184,10 @@
 .Nm grep
 to behave as traditional
 .Nm grep ) .
+.It Fl H
+Always print filename headers
+.Pq i.e. filenames
+with output lines.
 .It Fl h
 Never print filename headers
 .Pq i.e. filenames
@@ -349,7 +353,7 @@
 specification.
 .Pp
 The flags
-.Op Fl AaBbCGhILRUVwZ
+.Op Fl AaBbCGHhILRUVwZ
 are extensions to that specification, and the behaviour of the
 .Fl f
 flag when used with an empty pattern file is left undefined.
Index: grep.c
===================================================================
RCS file: /cvs/src/usr.bin/grep/grep.c,v
retrieving revision 1.42
diff -u -r1.42 grep.c
--- grep.c      2 Jul 2010 22:18:03 -0000       1.42
+++ grep.c      21 Feb 2011 12:29:41 -0000
@@ -62,6 +62,7 @@
 int     Eflag;         /* -E: interpret pattern as extended regexp */
 int     Fflag;         /* -F: interpret pattern as list of fixed strings */
 int     Gflag;         /* -G: interpret pattern as basic regexp */
+int     Hflag;         /* -H: always print filename header */
 int     Lflag;         /* -L: only show names of files with no matches */
 int     Rflag;         /* -R: recursively search directory trees */
 #ifndef NOZ
@@ -106,9 +107,9 @@
 {
        fprintf(stderr,
 #ifdef NOZ
-           "usage: %s [-abcEFGhIiLlnqRsUVvwx] [-A num] [-B num] [-C[num]]\n"
+           "usage: %s [-abcEFGHhIiLlnqRsUVvwx] [-A num] [-B num] [-C[num]]\n"
 #else
-           "usage: %s [-abcEFGhIiLlnqRsUVvwxZ] [-A num] [-B num] [-C[num]]\n"
+           "usage: %s [-abcEFGHhIiLlnqRsUVvwxZ] [-A num] [-B num] [-C[num]]\n"
 #endif
            "\t[-e pattern] [-f file] [--binary-files=value] 
[--context[=num]]\n"
            "\t[--line-buffered] [pattern] [file ...]\n", __progname);
@@ -116,9 +117,9 @@
 }
 
 #ifdef NOZ
-static char *optstr = "0123456789A:B:CEFGILRUVabce:f:hilnqrsuvwxy";
+static char *optstr = "0123456789A:B:CEFGHILRUVabce:f:hilnqrsuvwxy";
 #else
-static char *optstr = "0123456789A:B:CEFGILRUVZabce:f:hilnqrsuvwxy";
+static char *optstr = "0123456789A:B:CEFGHILRUVZabce:f:hilnqrsuvwxy";
 #endif
 
 struct option long_options[] =
@@ -134,6 +135,7 @@
        {"extended-regexp",     no_argument,            NULL, 'E'},
        {"fixed-strings",       no_argument,            NULL, 'F'},
        {"basic-regexp",        no_argument,            NULL, 'G'},
+       {"with-filename",       no_argument,            NULL, 'H'},
        {"binary",              no_argument,            NULL, 'U'},
        {"version",             no_argument,            NULL, 'V'},
        {"text",                no_argument,            NULL, 'a'},
@@ -315,6 +317,9 @@
                        Eflag = Fflag = 0;
                        Gflag++;
                        break;
+               case 'H':
+                       Hflag++;
+                       break;
                case 'I':
                        binbehave = BIN_FILE_SKIP;
                        break;
@@ -476,7 +481,7 @@
        if (lbflag)
                setlinebuf(stdout);
 
-       if ((argc == 0 || argc == 1) && !Rflag)
+       if ((argc == 0 || argc == 1) && !Rflag && !Hflag)
                hflag = 1;
 
        if (argc == 0)
Index: grep.h
===================================================================
RCS file: /cvs/src/usr.bin/grep/grep.h,v
retrieving revision 1.15
diff -u -r1.15 grep.h
--- grep.h      5 Apr 2010 03:03:55 -0000       1.15
+++ grep.h      21 Feb 2011 12:29:41 -0000
@@ -63,7 +63,7 @@
 extern int      cflags, eflags;
 
 /* Command line flags */
-extern int      Aflag, Bflag, Eflag, Fflag, Gflag, Lflag,
+extern int      Aflag, Bflag, Eflag, Fflag, Gflag, Hflag, Lflag,
                 Rflag, Zflag,
                 bflag, cflag, hflag, iflag, lflag, nflag, qflag, sflag,
                 vflag, wflag, xflag;

Reply via email to