Поиск файлов с обоими из двух указанных терминов с помощью 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'
Вы можете объединить это с другой командой grep:
git grep -l -E 'term1' | grep term2