Como uso o grep para pesquisar no diretório atual todos os arquivos que contêm a string "hello" e exibir apenas os arquivos .h e .cc?
138
grep -r --include=*.{cc,h} "hello" .
É exibido: procure recursivamente (em todos os subdiretórios também) por todos os arquivos .cc OU .h que contenham "hello" neste .
diretório (atual)
grep -si "hello" --include=*.{cc,h} ./* ./.*
(também busca arquivos ocultos). Aqui está uma versão genérica para procurar uma string em todos os / arquivos ocultos:grep -s "hello" * .*
. Talvez mais geralmente útil (e mais simples), essa pesquisa todos os arquivos não-escondida para "Olá":grep -si "hello" ./*
Graças a este post: askubuntu.com/a/777456grep -r --include=*.{java,py} "hello" .
Você pode passar caracteres curinga em vez de especificar nomes de arquivos ou usar stdin.
fonte
-R
não funciona infelizmente. Expande o*
antes de ir recursivamente.$ grep -R hello *
# find de toda a palavra contém hello (incluindo subdiretório)find . -name \*.cc -print0 -or -name \*.h -print0 | xargs -0 grep "hello"
.Verifique as páginas do manual para
find
exargs
para detalhes.fonte
-print0
após o'*.cc'
caso contrário, não terá uma ação para essa parte da pesquisa. Ou você tem que inserir parênteses lá:find . \( -name '*.cc' -or -name '*.h' \) -print0
.find -exec +
sintaxe em vez de xargs-exec grep "hello" {} +
onde o par de chaves representa o (s) nome (s) do arquivo. Boa sugestão.Para pesquisar no diretório atual recursivamente:
fonte
Se você precisar de uma pesquisa recursiva, terá várias opções. Você deveria considerar
ack
.Caso contrário, se você tiver GNU
find
exargs
:O uso de
/dev/null
garante que você obtenha nomes de arquivos impressos; o-print0
e-0
lida com nomes de arquivos que contenham espaços (novas linhas, etc).Se você não tiver nomes obstrutivos (com espaços, etc.), poderá usar:
Isso pode pegar alguns nomes que você não pretendia, porque a correspondência de padrões é mais imprecisa (mas mais simples), mas funciona. E funciona com versões não-GNU de
find
exargs
.fonte
find ... -exec grep "hello" {} +
Se eu li sua pergunta com atenção, você pede "grep para pesquisar no diretório atual todos e quaisquer arquivos que contenham a string" hello "e exibem apenas arquivos .h e .cc". Então, para atender às suas necessidades precisas, aqui está o meu envio:
Isso exibe os nomes dos arquivos:
... e isso exibe os nomes e o conteúdo do arquivo:
fonte
Convém
shopt -s nullglob
evitar mensagens de erro se não houver arquivos .h ou .cc.fonte
A maneira mais simples: grep -Ril "Seu texto" /
fonte