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).
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.
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 " \;
Tags command-line grep pipe tail unix