TheJoyOfHack

For people who like to make things

Let’s say you have two text files, FileA and FileB.  You want a file that has all the lines of FileA that are_ not_ in FileB.  How do you do that?

The simple answer is grep. The -v option inverts the search, and only prints lines that do not match.  The -f option is used to specify a file that contains a list of all the patterns for which to look - one pattern per line.

Let’s say FileA looks like this:

1 Alice 10
2 Bob   15
3 Alice 16
4 Carl  10
5 Dave  20

and FileB looks like this:

2 Bob   15
4 Carl  10

Then, you can use the following command to print out all lines from FileA that are not in FileB:

$ grep -vf FileB FileA
1 Alice 10
3 Alice 16
5 Dave  20
$

You could, alternatively, have gotten the same results if FileB looked like this:

.*Bob.*
.*Carl.*