Como usar o find e o grep efetivamente juntos

0

Para descobrir quais arquivos no diretório atual contêm uma string específica, eu comando find . -type f -print0 | xargs -0 grep -ial <word> . No entanto, isso só mostra o caminho para o arquivo. Como faço para imprimir o resultado em formato, que imprime caminho para arquivo, número (s) de linha, linha (s) correspondente (limitada por parâmetro) com n linhas de título e rejeito e nova linha antes do próximo resultado? Qual é o melhor recurso para aprender o uso de energia e dicas de ferramentas de busca de texto e manipulação de texto?

    
por Tuomas Toivonen 20.09.2016 / 06:27

1 resposta

3
grep -iarn -C3 word .

Isso pesquisará o diretório atual e todos os subdiretórios (assim como o comando find . -type f -print0 ) e mostrará as linhas nesses arquivos que correspondem à "palavra" com três linhas principais e finais de contexto e com o nome do arquivo e os números de linha rotulando cada linha.

Em vez de uma linha em branco entre as correspondências, grep fornece pares de linhas com apenas -- . Se você realmente precisa de uma linha em branco, porque você está alimentando a saída deste para algum outro programa, você pode usar esta versão:

grep -iarn -C3 word . | uniq | sed -e 's/^--$//'

Quanto a sua pergunta sobre como aprender dicas de energia, as páginas Unix man são leitura razoavelmente seca, mas percorrer a página man para algumas das ferramentas comuns é muito educacional. Eu também recomendo o aprendizado Perl se você fizer uma quantidade significativa de manipulação de texto no Linux ou UNIX.

    
por 20.09.2016 / 08:30

Tags