L'ordinateur est un ordinateur: il fait ce que vous lui avez dit au lieu de ce que vous vouliez qu'il fasse.
grep -v "something something"
imprime toutes les lignes qui ne contiennent pas something something
. Par exemple, il imprime deux lignes parmi les trois suivantes:
hello world
this is something something
something else
Pour imprimer des fichiers qui ne contiennent extends SomethingSomething
nulle part, utilisez l' -L
option:
grep -L -E 'extends[[:space:]]+SomethingSomething' FILENAME…
Certaines versions de grep n'ont pas cette -L
option (elle n'est pas spécifiée par POSIX ). Si le vôtre ne le fait pas, ne l'imprimez rien et utilisez le code de retour pour que le shell appelant fasse ce qu'il devrait faire à la place.
grep -q -E 'extends[[:space:]]+SomethingSomething' FILENAME ||
echo "$FILENAME"
Vous pouvez également utiliser 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 }
'
Sur Linux ou Cygwin (ou tout autre système avec GNU grep), vous n'avez pas besoin d'utiliser find
, car il grep
est capable de se reproduire.
grep -R --include='*.java' -L -E 'extends[[:space:]]+SomethingSomething'
Si votre shell est ksh ou bash ou zsh, vous pouvez faire en sorte que le shell fasse correspondre le nom de fichier. Sur bash, lancez d' set -o globstar
abord (vous pouvez le mettre dans votre ~/.bashrc
).
grep -L -E 'extends[[:space:]]+SomethingSomething' **/*.java