Как использовать grep для поиска в текущем каталоге всех файлов, имеющих строку "hello", но отображающих только файлы .h и .cc? - PullRequest
123 голосов
/ 09 февраля 2012

Как использовать grep для поиска в текущем каталоге любых файлов, содержащих строку "hello", и отображать только файлы .h и .cc?

Ответы [ 8 ]

147 голосов
/ 09 февраля 2012
grep -r --include=*.{cc,h} "hello" .

Это означает: рекурсивный поиск (также во всех подкаталогах) всех файлов .cc ИЛИ .h, содержащих «hello» в этом . (текущем) каталоге

еще один вопрос о переполнении стека

45 голосов
/ 09 февраля 2012

Вы можете передавать символы подстановки вместо указания имен файлов или использования стандартного ввода.

grep hello *.h *.cc
19 голосов
/ 09 февраля 2012

find . -name \*.cc -print0 -or -name \*.h -print0 | xargs -0 grep "hello".

Подробности см. На страницах справочника для find и xargs.

5 голосов
/ 27 июля 2018

Для рекурсивного поиска в текущем каталоге:

grep -r 'myString' .
5 голосов
/ 10 февраля 2012

Если я внимательно прочитал ваш вопрос, вы попросите "grep найти в текущем каталоге любой и все файлы , содержащие строку" привет "и отображающие только .h и.Копии файлов ".Итак, чтобы удовлетворить ваши точные требования, вот мое представление:

Это отображает имена файлов:

grep -lR hello * | egrep '(cc|h)$'

... и это отображает имена файлов и их содержание:

grep hello `grep -lR hello * | egrep '(cc|h)$'`
4 голосов
/ 09 февраля 2012

Если вам нужен рекурсивный поиск, у вас есть различные варианты.Вы должны рассмотреть ack.

Если вы не используете GNU find и xargs:

find . -name '*.cc' -print0 -o -name '*.h' -print0 | xargs -0 grep hello /dev/null

Использование /dev/null гарантируетвы печатаете имена файлов;-print0 и -0 имеют дело с именами файлов, содержащими пробелы (новые строки и т. д.).

Если у вас нет неприличных имен (с пробелами и т. д.), вы можете использовать:

find . -name '*.*[ch]' -print | xargs grep hello /dev/null

Это может подобрать несколько имен, которые вы не намеревались, потому что сопоставление с шаблоном нечеткое (но более простое), но в остальном работает.И это работает с не-GNU версиями find и xargs.

2 голосов
/ 09 февраля 2012
grep -l hello **/*.{h,cc}

Возможно, вы захотите shopt -s nullglob, чтобы избежать сообщений об ошибках, если нет файлов .h или .cc.

0 голосов
/ 15 сентября 2014

Самый простой способ: grep -Ril "Твой текст" /

...