Из документации API Java:
класс
Exception
и его подклассы являются формойThrowable
, который указывает на условия, которые разумное приложение могло бы хотеть поймать.
Error
подклассThrowable
, который указывает на серьезные проблемы, которые разумное приложение не должно пытаться поймать.
Ошибки обычно являются низким уровнем (например, повышенные виртуальной машиной) и не должны быть зафиксированы приложением, так как разумное продолжение не могло бы быть возможным.
grep -rl "override.*commitProperties" . | xargs grep -L "super.commitProperties"
-l
печатает файлы с совпадениями
-L
печатает файлы без совпадений
Попробуйте
find . -print0 | xargs -0 grep -l "override.*commitProperties" \
| tr '\012' '\000' | xargs -0 grep -L super.commitProperties
Команда tr
преобразует символы новой строки в ascii null, так что вы можете использовать -0
во втором xargs, избегая всех проблемы с пробелами в именах файлов и т. д.
Результат теста:
/tmp/test>more 1 2 3 | cat
::::::::::::::
1
::::::::::::::
override.*commitProperties
super.commitProperties
::::::::::::::
2
::::::::::::::
override.*commitProperties
::::::::::::::
3
::::::::::::::
hello world
/tmp/test>find . -print0 | xargs -0 grep -l "override.*commitProperties" | tr '\012' '\000' | xargs -0 grep -L super.commitProperties
./2
/tmp/test>
Как заметил Дуглас, find + xargs можно заменить на grep -r
.
Используйте комбинацию 2 greps и comm, как показано ниже (шаблоны A и B). Обратите внимание, что конвейерный grep не будет работать, так как шаблоны могут быть в разных строках.
$ cat a
A
$ cat b
B
$ cat ab
A
B
$ grep -l A * > A.only
$ grep -l B * > B.only
$ comm -23 A.only B.only
a
ПРИМЕЧАНИЕ: команда comm выводит строки, общие или уникальные для двух файлов. «-23» печатает строки, уникальные для первого файла, таким образом подавляя имена файлов во втором файле.
Мое решение похоже на решение Дугласа Лидера, за исключением того, что я не использую xargs:
grep -l 'override.*commitProperties' $(grep -L super.commitProperties *.txt)
Команда grep -L выводит список файлы, которые НЕ содержат шаблон super.commitProperties , команда grep -l ищет шаблон * override. commitProperties из этого списка.
В целом , это другой способ снять шкуру с кошки.
ack -l --make "override. * CommitProperties" | xargs ack -L "super.commitProperties"
Я использовал этот поток и пытался выполнить рекурсивный поиск. Это заняло 25 минут +, поэтому вместо этого мы узнали о ack
. Сделал это за 5 минут.
Удобный инструмент ack
.