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?
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?
Respostas:
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)
Você pode passar caracteres curinga em vez de especificar nomes de arquivos ou usar stdin.
grep hello *.h *.cc
-Rnão funciona infelizmente. Expande o *antes de ir recursivamente.
find . -name \*.cc -print0 -or -name \*.h -print0 | xargs -0 grep "hello".
Verifique as páginas do manual para finde xargspara detalhes.
-print0apó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.
Se você precisar de uma pesquisa recursiva, terá várias opções. Você deveria considerar ack.
Caso contrário, se você tiver GNU finde xargs:
find . -name '*.cc' -print0 -o -name '*.h' -print0 | xargs -0 grep hello /dev/null
O uso de /dev/nullgarante que você obtenha nomes de arquivos impressos; o -print0e -0lida com nomes de arquivos que contenham espaços (novas linhas, etc).
Se você não tiver nomes obstrutivos (com espaços, etc.), poderá usar:
find . -name '*.*[ch]' -print | xargs grep hello /dev/null
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 finde xargs.
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:
grep -lR hello * | egrep '(cc|h)$'
... e isso exibe os nomes e o conteúdo do arquivo:
grep hello `grep -lR hello * | egrep '(cc|h)$'`
grep -l hello **/*.{h,cc}
Convém shopt -s nullglobevitar mensagens de erro se não houver arquivos .h ou .cc.
A maneira mais simples: grep -Ril "Seu texto" /
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/777456