O computador está sendo um computador: ele está fazendo o que você mandou fazer em vez do que você queria que ele fizesse.
grep -v "something something"
imprime todas as linhas que não contêm something something
. Por exemplo, imprime duas linhas entre as três seguintes:
hello world
this is something something
something else
Para imprimir arquivos que não contenham extends SomethingSomething
em qualquer lugar, use a opção -L
:
grep -L -E 'extends[[:space:]]+SomethingSomething' FILENAME…
Algumas versões do grep não têm a opção -L
(não é especificado por POSIX ). Se o seu não tiver, imprima nada e use o código de retorno para fazer com que o shell de chamada faça o que for necessário.
grep -q -E 'extends[[:space:]]+SomethingSomething' FILENAME ||
echo "$FILENAME"
Como alternativa, use o 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 }
'
No Linux ou Cygwin (ou outro sistema com o GNU grep), você não precisa usar find
, pois grep
é capaz de recorrer.
grep -R --include='*.java' -L -E 'extends[[:space:]]+SomethingSomething'
Se o seu shell é ksh ou bash ou zsh, você pode fazer o shell fazer a correspondência do nome do arquivo. No bash, execute set -o globstar
primeiro (você pode colocar isso no seu ~/.bashrc
).
grep -L -E 'extends[[:space:]]+SomethingSomething' **/*.java