Como exibir apenas a última linha de uma listagem?

12

Suponha que eu faça uma lista e classifique os arquivos por seu atributo temporal:

ls -ltr

-rwxrwxrwx 1 bla bla 4096 Feb 01 20:10 foo1
-rwxrwxrwx 1 bla bla 4096 Feb 01 20:12 foo2
.
.
.
-rwxrwxrwx 1 bla bla 4096 Mar 05 13:25 foo1000

O que devo adicionar atrás do ls -ltr em uma cadeia de tubos para obter apenas a última linha da listagem? Sei que existem sed e awk, mas não sei como usá-los, só sei o que eles podem fazer.

Abdul Al Hazred
fonte

Respostas:

25

Desde que você perguntou sobre o sed especificamente,

ls -ltr | sed '$!d'
chave de aço
fonte
obrigado, agora estou um pouco orgulhosa por ter aprendido um pouco de concreto.
Abdul Al Hazred
3
Além disso, sed -n '$p'faz a mesma coisa, mas tail -1é realmente a ferramenta certa para o trabalho.
9117 imiric
Obrigado! Consegui extrair a última linha em / proc / cpuinfo e aparar o zero inicial com facilidade (usado para extrair o número de série do RPi3 com facilidade):sed '$!d s/.*: 0\+//' /proc/cpuinfo
Yaron
11

Você está procurando tail:

ls -ltr | tail -n 1

Isso exibirá apenas a última linha de ls -ltrsaída. Você pode controlar o número de linhas alterando o valor depois -n; se você omitir -n 1completamente, receberá dez linhas.

Stephen Kitt
fonte
resposta perfeita, muito rápida e útil
Abdul Al Hazred
tail -1... -né redundante.
dhchdhd 20/09/18
O @Barry tail -1está obsoleto (consulte a seção “RATIONALE” da especificação POSIXtail ou a última parte do manual GNUtails ); ainda funciona nesse caso, por enquanto, mas é melhor evitar usá-lo em exemplos.
Stephen Kitt
5

Com awk:

ls -ltr | awk 'END { print }'
taliezin
fonte