Комп'ютер є комп'ютером: він робить те, що ви йому наказали робити, а не те, що ви хотіли.
grep -v "something something"
друкує всі рядки, які не містять something something
. Наприклад, він друкує два рядки серед наступних трьох:
hello world
this is something something
something else
Щоб надрукувати файли, які extends SomethingSomething
ніде не містять , скористайтеся -L
опцією:
grep -L -E 'extends[[:space:]]+SomethingSomething' FILENAME…
У деяких версіях grep немає -L
можливості (це не визначено POSIX ). Якщо у вас немає, нехай вона нічого не друкує, і використовуйте код повернення, щоб оболонка виклику робила все, що вона повинна робити замість цього.
grep -q -E 'extends[[:space:]]+SomethingSomething' FILENAME ||
echo "$FILENAME"
Крім того, використовуйте 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 }
'
Для Linux або Cygwin (або іншої системи з GNU grep) вам не потрібно використовувати find
, оскільки grep
це може повторюватися.
grep -R --include='*.java' -L -E 'extends[[:space:]]+SomethingSomething'
Якщо ваша оболонка - ksh, bash або zsh, ви можете змусити оболонку зробити ім'я файлу відповідним. На bash, запустіть set -o globstar
спочатку (ви можете помістити це у свій ~/.bashrc
).
grep -L -E 'extends[[:space:]]+SomethingSomething' **/*.java