La computadora está siendo una computadora: está haciendo lo que le dijiste que hiciera en lugar de lo que querías que hiciera.
grep -v "something something"
imprime todas las líneas que no contienen something something
. Por ejemplo, imprime dos líneas entre las tres siguientes:
hello world
this is something something
something else
Para imprimir archivos que no contienen en extends SomethingSomething
ninguna parte, use la -L
opción:
grep -L -E 'extends[[:space:]]+SomethingSomething' FILENAME…
Algunas versiones de grep no tienen la -L
opción ( POSIX no lo especifica ). Si el tuyo no lo hace, haz que no imprima nada y usa el código de retorno para que el shell de llamada haga lo que sea que deba hacer.
grep -q -E 'extends[[:space:]]+SomethingSomething' FILENAME ||
echo "$FILENAME"
Alternativamente, 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 }
'
En Linux o Cygwin (u otro sistema con GNU grep), no necesita usar find
, ya que grep
es capaz de recurrir.
grep -R --include='*.java' -L -E 'extends[[:space:]]+SomethingSomething'
Si su shell es ksh o bash o zsh, puede hacer que el shell coincida con el nombre del archivo. En bash, corre set -o globstar
primero (puedes poner esto en tu ~/.bashrc
).
grep -L -E 'extends[[:space:]]+SomethingSomething' **/*.java