Как использовать grep для поиска в текущем каталоге всех файлов, имеющих строку "hello", но отображаемых только.h and.cc файлы?
Как использовать grep для поиска в текущем каталоге всех файлов, содержащих строку "hello", и только для отображения .H и. cc файлы?
8 ответов:
grep -r --include=*.{cc,h} "hello" .
это читает: поиск рекурсивно (во всех подкаталогах также) для all .cc или .H-файлы, которые содержат "привет" в этот
.
(текущего) каталога
вы можете передавать подстановочные знаки вместо указания имен файлов или использования stdin.
grep hello *.h *.cc
find . -name \*.cc -print0 -or -name \*.h -print0 | xargs -0 grep "hello"
.Проверьте страницы руководства для
find
иxargs
для сведения.
Если я внимательно прочитаю ваш вопрос, вы попросите " grep для поиска в текущем каталоге любые файлы содержит строку "hello" и только отображение .H и. CC файлы". Поэтому, чтобы удовлетворить ваши точные требования, вот мое представление:
это отображает имена файлов:
grep -lR hello * | egrep '(cc|h)$'
...и это отображение имен файлов и их содержимого:
grep hello `grep -lR hello * | egrep '(cc|h)$'`
Если вам нужен рекурсивный поиск, у вас есть различные варианты. Вы должны рассмотреть
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
.