В Можно ли изменить текстовые файлы при согласии на подверсию? Предоставление, предложенном, что я блокирую фиксации вместо этого.
Однако я не знаю, как проверить, что файл заканчивается новой строкой. Как можно обнаружить, что файл заканчивается новой строкой?
@Konrad: хвост не возвращает пустую строку. Я сделал файл, который имеет некоторый текст, который не заканчивается в новой строке и файле, который делает. Вот вывод от хвоста:
$ cat test_no_newline.txt
this file doesn't end in newline$
$ cat test_with_newline.txt
this file ends in newline
$
, Хотя я нашел, что хвост имеет, получают последнюю опцию байта. Таким образом, я изменил Ваш сценарий к:
#!/bin/sh
c=`tail -c 1 $1`
if [ "$c" != "" ]; then echo "no newline"; fi
Вы могли использовать что-то вроде этого в качестве своего сценария перед фиксацией:
#! /usr/bin/perl while (<>) { $last = $_; } if (! ($last =~ m/\n$/)) { print STDERR "File doesn't end with \\n!\n"; exit 1; }
Используя [только 111]:
x=`tail -n 1 your_textfile`
if [ "$x" == "" ]; then echo "empty line"; fi
(Заботятся для копирования пробелов правильно!)
@grom:
хвост не возвращает пустую строку
Чертовски. Мой тестовый файл не закончился на \n
, но на \n\n
. По-видимому vim
не может создать файлы, которые не заканчиваются на \n
(?). Так или иначе пока “get длятся byte” работы опции, все хорошо.
Или даже проще:
#!/bin/sh
test "$(tail -c 1 "$1")" && echo "no newline at eof: '$1'"
Но если вам нужна более надежная проверка:
test "$(tail -c 1 "$1" | wc -l)" -eq 0 && echo "no newline at eof: '$1'"