Только имя файла git grep

Я хочу посмотреть только отдельный файл, в котором есть определенное слово.

current_directory$ git grep 'word'

показывает каждую строку файла с соответствующим словом

Я попробовал это

current_directory$ git grep 'word' -- files-with-matches
current_directory$ git grep 'word' -- name-only

Но это не показывает никакого выхода.

Кроме того, кто-то может сказать, как я могу подсчитать общее количество появлений слова во всех файлах.

Любая помощь была бы благодарна:)

1 ответ

Решение

Помогает сообщение об ошибке

$ 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-match Печать только совпадающих (непустых) частей совпадающей строки, каждая из которых находится на отдельной выходной строке.

-w, --word-regexp Выбирать только те строки, которые содержат совпадения, образующие целые слова. Тест состоит в том, что соответствующая подстрока должна быть либо в начале строки, либо предшествовать не состоящему из слова символу. Точно так же, он должен быть либо в конце строки, либо следовать за символом, не входящим в состав слова. Составляющие слова символы - это буквы, цифры и подчеркивание.

-F, --fixed-strings Интерпретировать PATTERN как список фиксированных строк (вместо регулярных выражений), разделенных символами новой строки, любой из которых должен соответствовать.

--exclude-dir = DIR Исключить каталоги, соответствующие шаблону DIR, из рекурсивных поисков.

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

"--files-with-match" должно быть перед строкой поиска.

Другие вопросы по тегам