Eu preciso pesquisar as primeiras 50 linhas de cada arquivo em um diretório e seus subdiretórios.
Isso fará a parte recursiva, mas como limite apenas as 50 primeiras linhas de cada arquivo?
grep -r "matching string here" .
Alguns desses arquivos são enormes e eu só quero que eles correspondam nas 50 primeiras linhas. Estou tentando acelerar o processo, não pesquisando megabytes de dados binários em alguns arquivos.
Respostas:
Se você deseja apenas os arquivos que correspondem:
ou
Se você deseja apenas as seqüências correspondentes:
ou melhor,
E se você quer os dois:
Observações
sed
vez do combohead
-grep
.-exec ... +
em cada método, mas precisará codificar seu loop interno! (exercício trivial deixado para o leitor). Isso pode ser um pouco mais eficiente se você tiver um zilhão de arquivos.fonte
Se você precisar da saída grep como no original, poderá:
Se você precisar apenas dos nomes dos arquivos, poderá substituir o 2º grep
echo "$f"
.fonte
Você precisará combinar alguns utilitários diferentes para obter a funcionalidade desejada. Use o
find
comando para recursar os diretórios, encontrar todos os arquivos e executar ohead
comando em cada arquivo encontrado. Ohead
comando pode ser usado para despejar apenas as primeiras 50 linhas de cada arquivo. Por fim, canalize a saída para grep para procurar a string desejada.find . -type f -exec head -n 50 {} ";" | grep "matching string here"
fonte