grepdiff - Unix, Linux Command



grepdiff - show files modified by a diff containing a regex


grepdiff [-n] [--number-files] [-p n] [--strip=n] [--addprefix=PREFIX] [-s] [-i PATTERN] [-x PATTERN] [-v] [-E] [[-H] [--with-filename]] [[-h] [--no-filename]] [--output-matching=WHAT] {[REGEX] [-f FILE]} [file...]
grepdiff {[--help] [--version] [--list] [--filter ...]}


For each file modified by a patch, if the patch hunk contains the REGEX then the file’s name is printed.

The regular expression is treated as POSIX Basic Regular Expression syntax, unless the -E option is given in which case POSIX Extended Regular Expression syntax is used.

For example, to see the patches in my.patch which contain the regular expression \(lqpf_gfp_mask\(rq, use:

grepdiff pf_gfp_mask my.patch | \
  xargs -rn1 filterdiff my.patch -i

You can use both unified and context format diffs with this program.


-n Display the line number that each patch begins at. If verbose output is requested, each matching hunk is listed as well.

For a description of the output format see lsdiff(1).

  File numbers are listed, beginning at 1, before each filename.
-p n When matching, ignore the first n components of the pathname.
  Remove the first n components of the pathname before displaying it.
  Prefix the pathname with PREFIX before displaying it.
-s Show file additions, modifications and removals. A file addition is indicated by a \(lq+\(rq, a removal by a \(lq-\(rq, and a modification by a \(lq!\(rq.
  Include only files matching PATTERN.
  Exclude files matching PATTERN.
-E Use POSIX Extended Regular Expression syntax.
-H, --with-filename
  Print the name of the patch file containing each match.
-h, --no-filename
  Suppress the name of the patch file containing each match.
-f FILE Read regular expressions from FILE, one per line.
  Display the matching hunk-level or file-level diffs.
--help Display a short usage message.
  Display the version number of grepdiff.
  Behave like filterdiff(1) instead.
--list Behave like lsdiff(1) instead.


Consider the below patch file Hello.patch. It contains two patches generated from:
1. HelloWorld.c and HelloWorld_modified.c
2. HelloUniverse.c and HelloUniverse_modified.c

$ cat Hello.patch
--- HelloWorld.c        2016-02-25 18:42:08.000000000 +0530
+++ HelloWorld_modified.c       2016-02-25 18:43:22.000000000 +0530
@@ -2,5 +2,7 @@

 int main()
-       printf("Hello World\n");
+       char *msg = "Hello World\n";
+       printf("%s", msg);
--- HelloUniverse.c     2016-02-25 18:53:19.000000000 +0530
+++ HelloUniverse_modified.c    2016-02-25 18:53:37.000000000 +0530
@@ -2,5 +2,7 @@

 int main()
-       printf("Hello Universe\n");
+       char *msg = "Hello Universe\n";
+       printf("%s", msg);

Below two examples show basic usage of the command

1. Pattern matching in only one file

$ grepdiff "Hello World" Hello.patch

$ grepdiff "Hello Universe" Hello.patch

2. Pattern matching in multiple files

$ grepdiff "Hello" Hello.patch