Большинство решений на этой странице не работают для меня (FreeBSD 10.3 amd64).Решение Ian Will OSX работает почти всегда, но за ним довольно трудно следовать: - (
Существует простое решение, которое почти всегда работает тоже: (если $ f - это файл):
sed -i '' -e '$ a \' "$ f"
Существует серьезная проблема с решением sed: оно никогда не дает вам возможности просто проверить (и не добавлять новую строку).
Оба вышеупомянутых решения не работают для файлов DOS. Я думаю, что наиболее переносимое / пригодное для сценариев решение, возможно, самое простое, которое я разработал сам:объединяет файл / unix2dos / tail.В работе вам, вероятно, потребуется использовать «f» в кавычках и получить вывод хвоста (встроенный в переменную оболочки с именем last), так как \ «$ f \»
if file $f | grep 'ASCII text' > /dev/null; then
if file $f | grep 'CRLF' > /dev/null; then
type unix2dos > /dev/null || exit 1
dos2unix $f
last="`tail -c1 $f`"
[ -n "$last" ] && echo >> $f
unix2dos $f
else
last="`tail -c1 $f`"
[ -n "$last" ] && echo >> $f
fi
fi
Надеюсь, это кому-нибудь поможет.1014 *