我一直在尝试制定此命令的语法:
grep ! error_log | find /home/foo/public_html/ -mmin -60
或者:
grep '[^error_log]' | find /home/baumerf/public_html/ -mmin -60
我需要查看除名为 error_log
的文件之外的所有已修改文件。
I've read about it here,但只找到一个 not
-regex 模式。
grep -v
是您的朋友:
grep --help | grep invert
-v, --invert-match 选择不匹配的行
另请查看相关的 -L
(-l
的补集)。
-L, --files-without-match 只打印不包含匹配的文件名
您也可以将 awk
用于这些目的,因为它允许您以更清晰的方式执行更复杂的检查:
不包含 foo
的行:
awk '!/foo/'
既不包含 foo
也不包含 bar
的行:
awk '!/foo/ && !/bar/'
既不包含 foo
也不包含 bar
且包含 foo2
或 bar2
的行:
awk '!/foo/ && !/bar/ && (/foo2/ || /bar2/)'
等等。
grep
。为什么这被赞成?
在您的情况下,您可能不想使用 grep,而是在 find 命令中添加一个否定子句,例如
find /home/baumerf/public_html/ -mmin -60 -not -name error_log
如果您想在名称中包含通配符,则必须对其进行转义,例如排除后缀为 .log 的文件:
find /home/baumerf/public_html/ -mmin -60 -not -name \*.log
不定期副业成功案例分享
-e
选项:grep -v -e 'negphrase1' -e 'negphrase2'
grep -v 'negphrase1|negphrase2|negphrase3'
-E
强制 grep 将模式解释为扩展的正则表达式,即grep -vE 'negphrase1|negphrase2|negphrase3'
grep "" /dev/null * | grep foo | grep -v bar | cut -d: -f1 | sort -u
(why the first grep?,总有办法:))