То, как обнаружить файл, заканчивается в новой строке?

В Можно ли изменить текстовые файлы при согласии на подверсию? Предоставление, предложенном, что я блокирую фиксации вместо этого.

Однако я не знаю, как проверить, что файл заканчивается новой строкой. Как можно обнаружить, что файл заканчивается новой строкой?

16
задан Community 23 May 2017 в 11:46
поделиться

4 ответа

@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
16
ответ дан 30 November 2019 в 16:01
поделиться

Вы могли использовать что-то вроде этого в качестве своего сценария перед фиксацией:

#! /usr/bin/perl

while (<>) {
    $last = $_;
}

if (! ($last =~ m/\n$/)) {
    print STDERR "File doesn't end with \\n!\n";
    exit 1;
}
3
ответ дан 30 November 2019 в 16:01
поделиться

Используя [только 111]:

x=`tail -n 1 your_textfile`
if [ "$x" == "" ]; then echo "empty line"; fi

(Заботятся для копирования пробелов правильно!)

@grom:

хвост не возвращает пустую строку

Чертовски. Мой тестовый файл не закончился на \n, но на \n\n. По-видимому vim не может создать файлы, которые не заканчиваются на \n (?). Так или иначе пока “get длятся byte” работы опции, все хорошо.

2
ответ дан 30 November 2019 в 16:01
поделиться

Или даже проще:

#!/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'"
14
ответ дан 30 November 2019 в 16:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: