O computador está sendo um computador: está fazendo o que você mandou, 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, ele imprime duas linhas entre as três seguintes:
hello world
this is something something
something else
Para imprimir arquivos que não contêm extends SomethingSomething
nenhum lugar, use a -L
opção:
grep -L -E 'extends[[:space:]]+SomethingSomething' FILENAME…
Algumas versões do grep não têm a -L
opção (não é especificada pelo POSIX ). Se o seu não for, imprima nada e use o código de retorno para que o shell de chamada faça o que deve ser feito.
grep -q -E 'extends[[:space:]]+SomethingSomething' FILENAME ||
echo "$FILENAME"
Como alternativa, use 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 GNU grep), você não precisa usá-lo find
, pois grep
é capaz de se repetir.
grep -R --include='*.java' -L -E 'extends[[:space:]]+SomethingSomething'
Se seu shell for ksh, bash ou zsh, você poderá fazer com que o shell faça o nome do arquivo correspondente. No bash, execute set -o globstar
primeiro (você pode colocar isso no seu ~/.bashrc
).
grep -L -E 'extends[[:space:]]+SomethingSomething' **/*.java