仅使用Git grep搜索文件名

21

我希望只查看文本中包含特定单词的不同文件。

current_directory$ git grep 'word'
显示具有匹配单词的文件中的每一行。 所以我尝试了这个。
current_directory$ git grep 'word' -- files-with-matches
current_directory$ git grep 'word' -- name-only

但是它没有显示任何输出。

另外,我如何计算所有文件中“word”的总出现次数?


3
这是 --files-with-matches。在 -- 后面不要加空格。 - Ry-
@Ryan current_directory$ git grep 'word' --files-with-matches 致命错误:文件名后使用了无效标志“--files-with-matches” - Anushi Maheshwari
1
哦,你还需要将选项放在非选项之前。git grep --files-with-matches 'word' - Ry-
你不需要那个愚蠢的长名称,有一个短选项 grep -l 'word'。如果你想要相反的结果,使用 grep -L 'word' - jcubic
2个回答

32

错误信息有助于:

$ git grep 'foo' --files-with-matches
fatal: option '--files-with-matches' must come before non-option arguments

$ git grep --files-with-matches 'foo'
<list of matching files>

要计算单词数,我会使用GNU grep,做法如下(不确定git grep是否有相关选项):

$ grep --exclude-dir=.git -RowF 'foo' | wc -l
717

来自man grep

-R, --dereference-recursive
递归读取每个目录下的所有文件。与-r 不同,会跟随所有符号链接。

-o, --only-matching
仅打印匹配行中匹配(非空)部分,并将每个这样的部分单独输出到一行。

-w, --word-regexp
只选择包含形成完整单词的匹配项的行。测试是匹配子字符串必须在行首或者前面有一个非单词构成字符。同样地,它必须在行尾或后面有一个非单词构成字符。
单词组成字符是字母、数字和下划线。

-F, --fixed-strings
将PATTERN解释为一串固定的字符串(而不是正则表达式),由换行符分隔,任何一个都可以匹配。

--exclude-dir=DIR
从递归搜索中排除与模式DIR匹配的目录。


在Ubuntu MATE 20.04(Focal Fossa)上,“grep”是GNU grep(版本3.4)。 - Peter Mortensen

5
git grep --files-with-matches 'bar'

"

在搜索字符串之前,需要使用“--files-with-matches”选项

"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接