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

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

Ответ 1

grep -r --include=*.{cc,h} "hello" .

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

fooobar.com/questions/13093/...

Ответ 2

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

grep hello *.h *.cc

Ответ 3

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

Подробнее см. страницы руководства для find и xargs.

Ответ 4

Если вам нужен рекурсивный поиск, у вас есть множество вариантов. Вы должны рассмотреть 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.

Ответ 5

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

Отображаются имена файлов:

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

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

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

Ответ 6

grep -l hello **/*.{h,cc}

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

Ответ 7

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