以下grep表达式可以成功列出当前目录及其子目录中所有的.exe和.html文件。
ls -R |grep -E .*[\.exe]$\|.*[\.html]$
如何反转此结果以列出那些不是 .html 或 .exe 的文件(即,!=
)。
使用命令行选项-v
或--invert-match
,
ls -R |grep -v -E .*[\.exe]$\|.*[\.html]$
grep -v
或者grep --invert-match
您也可以使用find
来完成同样的操作:find . -type f \( -iname "*" ! -iname ".exe" ! -iname ".html"\)
更多信息请点击这里。
-v
选项添加到您的grep
命令中以反转结果。如多次说明的那样,通过 -v
选项可以实现反向匹配。让我补充一下(希望有趣)注意,您可以通过在 grep
帮助文本中进行 grep 来自己找到这个选项:
grep --help | grep invert
-v,--invert-match选择不匹配的行
grep "subscription" | grep -v "spec"
-v
/--invert-match
选项并不一定会翻转grep
命令的返回值,表明执行是否成功,而是匹配那些本来不匹配的行。如果想要翻转返回值(即在所有行都不匹配模式时才算成功,而不是至少有一个),应该使用! grep
命令。这在条件表达式中很有用,例如:if ! ls | grep -qE ".(\.exe)$"; then echo No .exe files in $(pwd); fi
。 - Zylls -R | grep -v -E ".*(\.exe)$|.*(\.vue)$"
。 - mlunoe