Il computer è un computer: sta facendo quello che gli hai detto di fare invece di quello che volevi che facesse.
grep -v "something something"
stampa tutte le righe che non contengono something something
. Ad esempio, stampa due righe tra le tre seguenti:
hello world
this is something something
something else
Per stampare file che non contengono da extends SomethingSomething
nessuna parte, utilizzare l' -L
opzione:
grep -L -E 'extends[[:space:]]+SomethingSomething' FILENAME…
Alcune versioni di grep non hanno l' -L
opzione (non è specificato da POSIX ). In caso contrario, non stampare nulla e utilizzare il codice di ritorno per fare in modo che la shell chiamante faccia tutto ciò che dovrebbe fare.
grep -q -E 'extends[[:space:]]+SomethingSomething' FILENAME ||
echo "$FILENAME"
In alternativa, usa 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 }
'
Su Linux o Cygwin (o altri sistemi con GNU grep), non è necessario utilizzare find
, poiché grep
è in grado di ripresentarsi.
grep -R --include='*.java' -L -E 'extends[[:space:]]+SomethingSomething'
Se la tua shell è ksh o bash o zsh, puoi fare in modo che la shell esegua la corrispondenza del nome file. Su bash, esegui set -o globstar
prima (puoi metterlo nel tuo ~/.bashrc
).
grep -L -E 'extends[[:space:]]+SomethingSomething' **/*.java