The following grep expression successfully lists all the .exe and .html files in the current directory and sub directories.
ls -R |grep -E .*[\.exe]$\|.*[\.html]$
How do I invert this result to list those that aren't a .html or .exe instead. (That is, !=.)
5 Answers
Use command-line option -v or --invert-match,
ls -R |grep -v -E .*[\.exe]$\|.*[\.html]$
grep -v
or
grep --invert-match
You can also do the same thing using find:
find . -type f \( -iname "*" ! -iname ".exe" ! -iname ".html"\)
More info here.
Add the -v option to your grep command to invert the results.
As stated multiple times, inversion is achieved by the -v option to grep. Let me add the (hopefully amusing) note that you could have figured this out yourself by grepping through the grep help text:
grep --help | grep invert
-v, --invert-match select non-matching lines
grep "subscription" | grep -v "spec"