Como encontrar a última correspondência de uma string em um monte de arquivos

1

Eu tenho um monte de arquivos, gostaria de encontrar a última correspondência de uma string em cada um deles.

grep text *.file me fornece todas as correspondências, não as últimas.

ls *.file | xargs grep text | tail -n 1 me fornece a última linha do último arquivo correspondente.

Então, o que eu acho que quero é uma maneira de dizer:

ls *.file | (xargs grep text | tail -n 1)

Mas não sei como fazer isso ou se é possível.

    
por Joe 16.11.2011 / 16:16

2 respostas

1

Use tail -n 1 em um loop for . Por exemplo:

for name in *.file; do
    grep -H text "$name" | tail -n 1
done

(A opção -H fará com que grep sempre imprima o nome do arquivo, mesmo que apenas um arquivo tenha sido fornecido).

    
por 16.11.2011 / 16:20
0

Existe um oneliner sobre um tac commad, que sai do final até o começo:

find . -name *.log -exec sh -c "tac '{}' | grep -Hm1 text " \;
    
por 04.02.2015 / 18:52