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
-R
nã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 find
e xargs
para detalhes.
-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.
Se você precisar de uma pesquisa recursiva, terá várias opções. Você deveria considerar ack
.
Caso contrário, se você tiver GNU find
e xargs
:
find . -name '*.cc' -print0 -o -name '*.h' -print0 | xargs -0 grep hello /dev/null
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:
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 find
e 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 nullglob
evitar 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