我想要git grep两个预先指定的单词(如果两个都存在,即ANDing)的文件,则假设这两个单词分别是word1和word2
我试过了
git grep -e 'word1' --and -e 'word2'
Run Code Online (Sandbox Code Playgroud)
我也尝试过
git grep 'word1'.*'word2'
Run Code Online (Sandbox Code Playgroud)
但两者都仅在word1和word2位于同一行时才检索结果,而第二个在行中排在第一位时不检索结果word2,这是我不希望的。
我想检索文件,即使两个单词不在同一行(我不确定将它们分开多少行,并且顺序也不重要;应该提取任何顺序)。
这可能吗 ?
搜索多行git-grep是不可能的。
取自:http : //git.661346.n2.nabble.com/bug-git-grep-P-and-multiline-mode-td7613900.html
是的,并且是故意这样的,以避免必须考虑诸如“多行匹配如何与 'grep -n' 交互?”之类的事情。
我们的行为就像我们一次将每一行内容提供给由 -P/-E/-G/-F 选项选择的匹配引擎一样,因此这个限制不太可能改变。
你可以做
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)