Как получить последнюю непустую строку файла с помощью tail in Bash?

как получить последнюю непустую строку с помощью tail под оболочкой Bash?

например, my_file.txt выглядит так:

привет
hola
Бонжур!--10--> (пустая строка)
(пустая строка)

очевидно, если я это сделаю tail -n 1 my_file.txt я получу пустую строку. В моем случае я хочу получить bonjour. Как мне это сделать?

6 ответов


вы можете использовать Awk:

awk '/./{line=} END{print line}' my_file.txt

это решение имеет преимущество использования только одного инструмента.


используйте tac, поэтому вам не нужно читать весь файл:

tac FILE |egrep -m 1 .

Как насчет использования grep сначала отфильтровать пустые строки?

$ cat rjh
1
2
3


$ grep "." rjh | tail -1
3

вместо tac можно использовать tail -r если таковые имеются.

tail -r | grep -m 1 '.'

Если вы хотите опустить любые пробелы, то есть пробелы / вкладки в конце строки, а не только пустые строки

awk 'NF{p=}END{print p}' file

Если tail -r недоступна и у вас нет egrep, хорошо работает следующее:

tac $FILE | grep -m 1 '.'

как вы можете видеть, это комбинация двух предыдущих ответов.