Правильно завершенный текстовый файл с пустой последней строкой заканчивается двумя \ n
.
Затем мы ожидаем, что tail -c2
должен быть равен $ '\ n \ n'
.
К сожалению, расширения команд удаляют завершающие новые строки. Нам потребуется небольшая настройка.
f=filename
nl='
'
t=$(tail -c2 $f; printf x) # capture the last two characters.
r="${nl}${nl}$" # regex for: "ends in two newlines".
[[ ${t%x} =~ $r ]] && echo "file $f ends in an empty line"
Мы могли бы даже немного расширить, чтобы проверить, какие файлы не имеют завершающей новой строки:
nl='
'
nl=$'\n'
find . -type f -name '*.styl' | while read f; do
t=$(tail -c2 $f; printf x); r1="${nl}$"; r2="${nl}${r1}"
[[ ${t%x} =~ $r1 ]] || echo "file $f is missing a trailing newline"
[[ ${t%x} =~ $r2 ]] && echo "$f"
done
Обратите внимание, что при необходимости новую строку можно изменить на что-то вроде $ '\ r \ n
.
В этом случае также измените tail -c2
на tail -c4
.