Поиск файлов с обоими из двух указанных терминов с помощью git grep

Я пытаюсь найти файлы в моем git-репозитории, используя git grep, и у меня нет простого способа сделать это без ручного поиска. Я нашел один обходной путь, как это:

git grep -l 'term1' | xargs -i grep -l term2 {}

Но мне интересно, есть ли способ, подобный этому, который не требует xargs:

git grep -l -E 'term1|term2'

По сути, это означает показать мне файлы, содержащие термин 1 или термины 2... есть ли "показать мне файлы с ОБА этими терминами".

Я пытаюсь использовать команду git grep так, чтобы это было непрактично для передачи команд в другие команды. Я действительно ненавижу работать с модулем подпроцесса python и его использованием трубопровода...

2 ответа

Решение

Два способа достижения цели:

1) объединение нескольких шаблонов, указанных -e вариант с --and флаг

--а также
--или же
--не
( …)
Укажите, как несколько шаблонов объединяются с использованием логических выражений.

git grep -l -e 'term1' --and -e 'term2'

2) используя --all-match флаг

При задании нескольких выражений-шаблонов в сочетании с --or этот флаг указывается для ограничения соответствия файлам, строки которых соответствуют всем из них.

git grep -l --all-match -e 'term1' -e 'term2'

https://git-scm.com/docs/git-grep

Вы можете объединить это с другой командой grep:

git grep -l -E 'term1' | grep term2
Другие вопросы по тегам