Comment détecter le fichier se termine en retour à la ligne?
-
09-06-2019 - |
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?
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.