如何使用grep匹配所有不匹配特定模式的行?我试过这个:
grep
grep '[^foo]'
zbwhf8kr1#
grep -v是你的朋友:
grep -v
grep --help | grep invert
-v,--反相匹配选择非匹配行还可以查看相关的-L(-l的补码)。-L,--files-without-match only print FILE names containing no match
-L
-l
rsl1atfo2#
您也可以使用awk来实现这些目的,因为它允许您以更清晰的方式执行更复杂的检查:不包含foo的行:
awk
foo
awk '!/foo/'
既不包含foo也不包含bar的行:
bar
awk '!/foo/ && !/bar/'
既不包含foo也不包含bar但包含foo2或bar2的行:
foo2
bar2
awk '!/foo/ && !/bar/ && (/foo2/ || /bar2/)'
等等。
cotxawn73#
在您的例子中,您可能不想使用grep,而是在find命令中添加一个否定子句e。g的。
find /home/baumerf/public_html/ -mmin -60 -not -name error_log
如果你想在名字中包含通配符,你必须对它们进行转义。例如,排除带有后缀的文件。日志:
find /home/baumerf/public_html/ -mmin -60 -not -name \*.log
3条答案
按热度按时间zbwhf8kr1#
grep -v
是你的朋友:-v,--反相匹配选择非匹配行
还可以查看相关的
-L
(-l
的补码)。-L,--files-without-match only print FILE names containing no match
rsl1atfo2#
您也可以使用
awk
来实现这些目的,因为它允许您以更清晰的方式执行更复杂的检查:不包含
foo
的行:既不包含
foo
也不包含bar
的行:既不包含
foo
也不包含bar
但包含foo2
或bar2
的行:等等。
cotxawn73#
在您的例子中,您可能不想使用grep,而是在find命令中添加一个否定子句e。g的。
如果你想在名字中包含通配符,你必须对它们进行转义。例如,排除带有后缀的文件。日志: