通过 git grep 查找具有两个指定术语的文件

Finding files with both of two specified terms via git grep

我正在尝试使用 git grep 在我的 git 存储库中查找文件,如果不手动搜索,我没有简单的方法可以做到这一点。我找到了这样的解决方法:

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

但我想知道是否有类似的方法不需要 xargs:

git grep -l -E 'term1|term2'

这实际上意味着向我显示包含 term1 或 term2 的文件...是否有 "show me files with BOTH these terms."

我正在尝试以一种不实用的方式使用 git grep 命令以将命令管道化到其他命令中。我真的很讨厌使用 python 的子流程模块及其对管道的使用...

您可以将它与另一个 grep 命令结合使用:

git grep -l -E 'term1' | grep term2

实现目标的两种方式:

1)-e 选项指定的多个模式与 --and 标志

组合

--and
--or
--not
( …​ )
Specify how multiple patterns are combined using Boolean expressions.

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

2) 使用 --all-match 标志

When giving multiple pattern expressions combined with --or, this flag is specified to limit the match to files that have lines to match all of them.

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

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