Git Grep多行中的多个单词

Ash*_*hir 5 git git-grep

我想要git grep两个预先指定的单词(如果两个都存在,即ANDing)的文件,则假设这两个单词分别是word1word2

我试过了

git grep -e 'word1' --and -e 'word2'
Run Code Online (Sandbox Code Playgroud)

我也尝试过

git grep 'word1'.*'word2'
Run Code Online (Sandbox Code Playgroud)

但两者都仅在word1word2位于同一行时才检索结果,而第二个在行中排在第一位时不检索结果word2,这是我不希望的。

我想检索文件,即使两个单词不在同一行(我不确定将它们分开多少行,并且顺序也不重要;应该提取任何顺序)。

这可能吗 ?

alp*_*ert 7

搜索多行git-grep是不可能的。

取自:http : //git.661346.n2.nabble.com/bug-git-grep-P-and-multiline-mode-td7613900.html

是的,并且是故意这样的,以避免必须考虑诸如“多行匹配如何与 'grep -n' 交互?”之类的事情。

我们的行为就像我们一次将每一行内容提供给由 -P/-E/-G/-F 选项选择的匹配引擎一样,因此这个限制不太可能改变。


Eog*_*anM 5

你可以做

git grep -l word1 |xargs grep -l word2
Run Code Online (Sandbox Code Playgroud)

-l选项列出文件名而不是匹配行。

这是将它们输入第二个右侧 grep 所必需的(xargs 是一个实用管道函数)

-l我猜您也会对右侧感到满意,否则它会显示与没有引用的匹配的行。word2word1


现在刚刚看到@twalberg 的评论,它推荐了类似的解决方案。

这提醒我,如果您在文件名方面遇到问题,则需要一些额外的参数:

git grep -zl word1 |xargs -0 grep -l word2
Run Code Online (Sandbox Code Playgroud)