Frage

Über an Können Sie ändern-text-Dateien, die beim Begehen, für die subversion? Grant schlug vor, dass ich verpflichtet block statt.

Aber ich weiß nicht, wie zu überprüfen, eine Datei endet mit einem Zeilenumbruch.Wie können Sie erkennen, dass die Datei endet mit einem Zeilenumbruch?

War es hilfreich?

Lösung

@Konrad:Schwanz nicht zurück, wird eine leere Zeile.Ich machte eine Datei mit text, der nicht in neue Zeile und eine Datei, die funktioniert.Hier ist die Ausgabe von Rute:

$ cat test_no_newline.txt
this file doesn't end in newline$ 

$ cat test_with_newline.txt
this file ends in newline
$

Obwohl ich fand, dass der Schwanz hat im letzten byte-option.So modifizierte ich das Skript:

#!/bin/sh
c=`tail -c 1 $1`
if [ "$c" != "" ]; then echo "no newline"; fi

Andere Tipps

Oder noch einfacher:

#!/bin/sh
test "$(tail -c 1 "$1")" && echo "no newline at eof: '$1'"

Aber wenn Sie wollen eine mehr stabile überprüfen:

test "$(tail -c 1 "$1" | wc -l)" -eq 0 && echo "no newline at eof: '$1'"

Hier ist ein nützliches bash-Funktion:

function file_ends_with_newline() {
    [[ $(tail -c1 "$1" | wc -l) -gt 0 ]]
}

Sie können es verwenden, wie:

if ! file_ends_with_newline myfile.txt
then
    echo "" >> myfile.txt
fi
# continue with other stuff that assumes myfile.txt ends with a newline

Sie könnte so etwas wie diese als pre-commit-Skript:

#! /usr/bin/perl

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

if (! ($last =~ m/\n$/)) {
    print STDERR "File doesn't end with \\n!\n";
    exit 1;
}

Arbeitete für mich:

tail -n 1 /path/to/newline_at_end.txt | wc --lines
# according to "man wc" : --lines - print the newline counts

So wc zählt die Anzahl der newline chars, was gut ist in unserem Fall.Die oneliner druckt entweder 0 oder 1 nach der Anwesenheit der Zeilenumbruch am Ende der Datei.

Mit nur bash:

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

(Achten Sie auf kopieren Sie die Leerzeichen richtig!)

@grom:

Schwanz nicht zurück, wird eine leere Zeile

Verdammt.Meine test-Datei am Ende nicht auf \n aber auf \n\n.Offenbar vim kann nicht erstellen Sie Dateien, die am Ende nicht auf \n (?).Jedenfalls solange, wie die "get last byte" option funktioniert, ist alles gut.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top