Как отобразить только последнюю строку в списке?

12

Предположим, я составил список и отсортировал файлы по его временному атрибуту:

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

Что я должен добавить после ls -ltr в цепочке каналов, чтобы получить только последнюю строку в списке? Я знаю, что есть sed и awk, но я не знаю, как их использовать, я знаю только то, что они могут сделать.

Абдул Аль Хазред
источник

Ответы:

25

Так как вы спросили о sed конкретно,

ls -ltr | sed '$!d'
steeldriver
источник
спасибо, теперь я немного горжусь тем, что выучил конкретный сед.
Абдул Аль Хазред
3
Кроме того, sed -n '$p'делает то же самое, но на самом деле tail -1это правильный инструмент для работы.
Имирик
Благодарность! Мне удалось извлечь последнюю строку в / proc / cpuinfo и с легкостью обрезать начальный ноль (используется для легкого извлечения серийного номера RPi3):sed '$!d s/.*: 0\+//' /proc/cpuinfo
Ярон
11

Вы ищете tail:

ls -ltr | tail -n 1

Это отобразит только последнюю строку ls -ltrвыходных данных. Вы можете контролировать количество строк, изменяя значение после -n; если вы -n 1полностью пропустите, вы получите десять строк.

Стивен Китт
источник
идеальный, очень быстрый и полезный ответ
Абдул Аль Хазред
tail -1... -nизбыточно.
18:00
@Barry tail -1осуждается (смотрите раздел «ПОЯСНЕНИЙ» из спецификации POSIX дляtail или последней части ГНУ tailsруководства ); на данный момент это все еще работает, но лучше избегать использования в примерах.
Стивен Китт