Eu gostaria de listar os arquivos recursiva e exclusivamente que contêm a palavra dada.

Exemplo : Checando a palavra “verificar”, normalmente faço um grep

$ grep check * -R 

Mas como há muitas ocorrências dessa palavra, obtenho muitos resultados. Portanto, só preciso listar os nomes de arquivo que contêm a palavra de pesquisa fornecida. Acho que algum truque com find e xargs seria suficiente aqui, mas não tenho certeza.

Alguma ideia?

Resposta

Use -l ou --files-with-matches opção documentada da seguinte maneira:

Suprime a saída normal; em vez disso, imprima o nome de cada arquivo de entrada do qual a saída normalmente teria sido impressa. A varredura será interrompida na primeira partida. (-l é especificado por POSIX.)

Portanto, para seu exemplo, você pode usar o seguinte:

$ grep check * -lR 

Comentários

  • Funciona em MSYS também. Ótimo!
  • Usei grep -rl "text to find" "/usr/share" e funcionou muito bem!

Resposta

find . -type f -exec grep -l check {} + 

Você provavelmente não quer usar a opção -R que com versões modernas do GNU grep segue links simbólicos ao descer diretórios. Use a opção -r, que desde a versão 2.12 (abril de 2012) não segue mais links simbólicos.

Se o seu grep não for GNU, ou for anterior à versão 2.12, ou se você precisa que seu código seja portável para sistemas GNU não avançados, use o find comando acima.

Caso contrário, você pode fazer:

grep -rl check . 

Não use * (pois isso omitiria arquivos ocultos no diretório atual (e apenas no diretório atual) e causaria problemas para arquivos cujo nome comece com -), evite passar opções após argumentos, pois isso não é garantido precisam funcionar dependendo do ambiente e não é portátil.

Resposta

Tente isto:

find . -type f | xargs grep -c check $1 | grep -v ":0" 

Quanto aos grep sinalizadores …

-c irá retorna um nome de arquivo seguido por: e um número indicando quantas vezes a string de pesquisa aparece no arquivo fornecido.

-v obterá a saída do primeiro grep pesquise, filtre os arquivos com resultados zero e imprima apenas os arquivos com resultados diferentes de zero.

Comentários

  • Isso obterá um falso negativo se você tiver arquivo (s) (ou diretor (es)) cujos nomes contenham :0. É ' melhor fazer grep -v ':0$'. Mesmo isso irá bloquear os nomes de caminho que contêm novas linhas.

Resposta

grep -lR "text-to-find" <where-to-find> também funciona bem.

por exemplo, grep -lR "NAVIGATE" . onde encontramos a palavra NAVIGATE no . no diretório atual.

Resposta

grep -rin “whatToFind” locationToFInd

por exemplo, $ grep -rin “vihaan”.

irá pesquisar e listar recursivamente os nomes dos arquivos e as linhas correspondentes que contenham “vihaan”, “.” refere-se ao diretório atual.

Resposta

find . -type f | grep "keyword" * 

pesquise no diretório atual. Para pesquisar na raiz, especifique / em vez de .

Resposta

 grep -rli trim \` find . -name *.q \` 

Fornece a lista de .q arquivos que contêm a palavra-chave trim

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *