Der Computer ist ein Computer: Er tut, was Sie ihm befohlen haben, anstatt das zu tun, was Sie von ihm wollten.
grep -v "something something"
druckt alle Zeilen, die nicht enthalten something something
. Beispielsweise werden zwei der folgenden drei Zeilen gedruckt:
hello world
this is something something
something else
extends SomethingSomething
Verwenden Sie die folgende -L
Option, um Dateien zu drucken, die nirgendwo enthalten :
grep -L -E 'extends[[:space:]]+SomethingSomething' FILENAME…
Einige Versionen von grep verfügen nicht über die -L
Option (sie wird von POSIX nicht angegeben ). Wenn dies nicht der Fall ist, lassen Sie es nichts drucken und den Rückkehrcode verwenden, damit die aufrufende Shell das tut, was sie tun soll.
grep -q -E 'extends[[:space:]]+SomethingSomething' FILENAME ||
echo "$FILENAME"
Alternativ können Sie awk verwenden.
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 }
'
Unter Linux oder Cygwin (oder einem anderen System mit GNU grep) müssen Sie es nicht verwenden find
, da grep
es sich um ein rekursives System handelt.
grep -R --include='*.java' -L -E 'extends[[:space:]]+SomethingSomething'
Wenn Ihre Shell ksh oder bash oder zsh ist, können Sie die Shell veranlassen, den Dateinamen abzugleichen. Bei Bash set -o globstar
zuerst ausführen (Sie können dies in Ihre einfügen ~/.bashrc
).
grep -L -E 'extends[[:space:]]+SomethingSomething' **/*.java