使用grep的负匹配(不包含foo的匹配行)

如何使用grep匹配所有不匹配特定模式的行?我试过这个:

grep '[^foo]'
1136920 次浏览

grep -v是你的朋友:

grep --help | grep invert

-v,--invert-map选择不匹配的行

还要检查相关的-L-l的补集)。

-L,--files-no-Match仅打印不包含匹配项的文件名

您还可以将awk用于这些目的,因为它允许您以更清晰的方式执行更复杂的检查:

不包含foo的行:

awk '!/foo/'

既不包含foo也不包含bar的行:

awk '!/foo/ && !/bar/'

既不包含foo也不包含bar但包含foo2bar2的行:

awk '!/foo/ && !/bar/ && (/foo2/ || /bar2/)'

诸如此类。

在您的情况下,您可能不想使用grep,而是在查找命令中添加一个否定子句,例如:

find /home/baumerf/public_html/ -mmin -60 -not -name error_log

如果您想在名称中包含通配符,则必须对它们进行转义,例如排除后缀为. log的文件:

find /home/baumerf/public_html/ -mmin -60 -not -name \*.log