Search code examples
regexlinuxgrep

Find files that does not contain a string


To find all the files that contain "foo" in current folder, I use:

grep -r "foo" .

To find all the files that contain "bar" in current folder, I use:

grep -r "bar" .

But how to find all files that does not contain 'foo' and 'bar'?


Solution

  • To print lines that do not contain some string, you use the -v flag:

    grep -r -v "bar" . | grep -v "foo"
    

    This gives you all lines that do not contain foo or bar.

    To print files that do not contain some string, you use the -L flag. To non-match several strings, you can use regular expressions with the -P flag (there are several regex flags you can use):

    grep -r -L -P "(foo|bar)" .
    

    This prints a list of files that don't contain foo or bar.

    Thanks to Anton Kovalenko for pointing this out.