Question

Plus à Pouvez-vous modifier des fichiers texte au moment de la validation de la subversion? Subvention a suggéré que je bloque s'engage à la place.

Cependant, je ne sais pas comment vérifier que le fichier se termine par un saut de ligne.Comment pouvez-vous détecter que le fichier se termine par un saut de ligne?

Était-ce utile?

La solution

@Konrad:la queue ne renvoie pas une ligne vide.J'ai fait un fichier texte qui n'a pas de fin dans le saut de ligne et d'un fichier qui n'.Voici le résultat de la queue:

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

$ cat test_with_newline.txt
this file ends in newline
$

Bien que je trouve que la queue a obtenir le dernier octet de l'option.J'ai donc modifié le script:

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

Autres conseils

Ou encore plus simple:

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

Mais si vous voulez un plus robuste vérifier:

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

Voici un utile bash fonction:

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

Vous pouvez l'utiliser comme:

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

Vous pouvez utiliser quelque chose comme ce que votre pre-commit script:

#! /usr/bin/perl

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

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

A fonctionné pour moi:

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

Donc, wc compte le nombre de caractères de saut de ligne, ce qui est bon dans notre cas.Le oneliner imprime soit 0 ou 1 selon la présence de saut de ligne à la fin du fichier.

En utilisant seulement bash:

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

(Prenez soin de copier l'url correctement!)

@grom:

la queue ne renvoie pas une ligne vide

Merde.Mon fichier de test n'est pas sur \n mais sur \n\n.Apparemment vim ne peut pas créer des fichiers qui ne se terminent pas sur \n (?).De toute façon, tant que le “dernier octet” option fonctionne, tout est bien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top