Jak wyświetlić tylko ostatni wiersz wpisu?

12

Załóżmy, że robię listę i sortuję pliki według atrybutu czasowego:

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

Co powinienem dodać za ls -ltr w łańcuchu rur, aby uzyskać tylko ostatni wiersz listingu? Wiem, że są sed i awk, ale nie wiem, jak ich używać, wiem tylko, co potrafią.

Abdul Al Hazred
źródło

Odpowiedzi:

25

Ponieważ pytałeś konkretnie o sed,

ls -ltr | sed '$!d'
steeldriver
źródło
dziękuję, jestem teraz trochę dumny z tego, że nauczyłem się czegoś konkretnego.
Abdul Al Hazred
3
Ponadto, sed -n '$p'robi to samo, ale tak naprawdę tail -1jest odpowiednim narzędziem do pracy.
imiric
Dzięki! Udało mi się wyodrębnić ostatnią linię w / proc / cpuinfo i z łatwością przyciąć wiodące zero (używane z łatwością do wyodrębnienia numeru seryjnego RPi3):sed '$!d s/.*: 0\+//' /proc/cpuinfo
Yaron
11

Poszukujesz tail:

ls -ltr | tail -n 1

Spowoduje to wyświetlenie tylko ostatniego wiersza ls -ltrwyniku. Możesz kontrolować liczbę wierszy, zmieniając wartość po -n; jeśli -n 1całkowicie pominiesz , dostaniesz dziesięć linii.

Stephen Kitt
źródło
idealna, bardzo szybka i pomocna odpowiedź
Abdul Al Hazred
tail -1... -njest zbędny.
dhchdhd
@Barry tail -1jest przestarzały (patrz sekcja „RATIONALE” specyfikacji POSIXtail lub ostatnia część instrukcji GNUtails ); na razie działa w tym przypadku, ale najlepiej unikać go w przykładach.
Stephen Kitt,
5

Z awk:

ls -ltr | awk 'END { print }'
taliezin
źródło