Tem saída grep espaçada para cada arquivo

1

Quando faço grep em um monte de arquivos, e vários arquivos têm a palavra que estou procurando, a saída é difícil de ler, pois é um após o outro. Existe alguma maneira de inserir \ n's adicionais após a saída correspondente de cada arquivo.

Exemplo, saída atual que recebo

$ grep word daily_log.201407*
<daily_log.20140702-matches  about 100 lines>
<daily_log.20140704-matches  about 10 lines>
<daily_log.20140706-matches  about 50 lines>

Tentando alcançar algo como

$ grep word daily_log.201407*
<daily_log.20140702-matches  about 100 lines>


<daily_log.20140704-matches  about 10 lines>


<daily_log.20140706-matches  about 50 lines>

Espero que a pergunta esteja clara. Alguma maneira de fazer isso?

    
por mtk 16.07.2014 / 09:10

2 respostas

2

Você pode grep cada arquivo e adicionar linhas extras com base no resultado do grep (ou seja, não para arquivos que não correspondem):

for fn in daily_log.201407* ; do
grep word "$fn"
if [ $? == 0 ] ; then
   echo -e '\n\n\n'
fi
done
    
por 16.07.2014 / 09:17
1

A maneira mais fácil de fazer isso provavelmente será awk :

awk 'FNR==1 { print "\n\n\n" } ; /word/ { print FILENAME ":" $0 }' daily_log.201407*

Isso imprime todas as linhas correspondentes a word com o nome do arquivo antes dele (como grep faz com vários arquivos). Antes da primeira linha de cada arquivo, ela imprime algumas linhas em branco. Ele sabe que está no início do arquivo porque FNR (o número do arquivo linha no arquivo atual) é 1 .

    
por 16.07.2014 / 09:24