计算机就是计算机:它在执行您要它执行的操作,而不是您想要执行的操作。
grep -v "something something"
打印不包含的所有行something something
。例如,它在以下三行中打印两行:
hello world
this is something something
something else
要打印不包含extends SomethingSomething
任何位置的文件,请使用以下-L
选项:
grep -L -E 'extends[[:space:]]+SomethingSomething' FILENAME…
某些版本的grep没有该-L
选项(POSIX未指定)。如果不是,则不打印任何内容,并使用返回代码让调用Shell进行应做的事情。
grep -q -E 'extends[[:space:]]+SomethingSomething' FILENAME ||
echo "$FILENAME"
或者,使用awk。
awk '
FNR == 1 && NR != 1 && !found { print fn }
FNR == 1 { fn = FILENAME; found = 0; }
/extends[[:space:]]+SomethingSomething/ { found = 1 }
END { if (fn != "" && !found) print fn }
'
在Linux或Cygwin(或其他具有GNU grep的系统)上,您无需使用find
,因为grep
它可以递归。
grep -R --include='*.java' -L -E 'extends[[:space:]]+SomethingSomething'
如果您的外壳是ksh或bash或zsh,则可以使外壳执行文件名匹配。在bash上,set -o globstar
先运行(您可以将其放入中~/.bashrc
)。
grep -L -E 'extends[[:space:]]+SomethingSomething' **/*.java