J'ai trouvé la solution ici.
#!/bin/bash
x=`tail -n 1 "$1"`
if [ "$x" == "" ]; then
echo "Newline at end of file!"
else
echo "No Newline at end of file!"
fi
IMPORTANT :Assurez-vous d'avoir le droit d'exécuter et de lire le script !chmod 555 script
UTILISATION :
./script text_with_newline OUTPUT: Newline at end of file!
./script text_without_newline OUTPUT: No Newline at end of file!
Tapez simplement :
cat -e nameofyourfile
S'il y a une nouvelle ligne, elle se terminera par $
Si ce n'est pas le cas, il se terminera par un %
symbole.
La réponse d'Olivier Pirson est plus soignée que celle que j'ai postée ici à l'origine (elle gère également correctement les fichiers vides). J'ai modifié ma solution pour qu'elle corresponde à la sienne.
En bas :
newline_at_eof()
{
if [[ -s "$1" && -z "$(tail -c 1 "$1")" ]]
then
echo "Newline at end of file!"
else
echo "No newline at end of file!"
fi
}
En tant que script shell que vous pouvez appeler (le coller dans un fichier, chmod +x <filename>
pour le rendre exécutable):
#!/bin/bash
if [[ -s "$1" && -z "$(tail -c 1 "$1")" ]]
then
echo "Newline at end of file!"
else
echo "No newline at end of file!"
fi
Le \Z
méta-caractère signifie la fin absolue de la chaîne.
if (preg_match('#\n\Z#', file_get_contents('foo.txt'))) {
echo 'New line found at the end';
}
Donc, ici, vous regardez une nouvelle ligne à la fin absolue de la chaîne. file_get_contents
n'ajoutera rien à la fin. MAIS il chargera le fichier entier en mémoire ; si votre fichier n'est pas trop volumineux, ça va, sinon vous devrez apporter une nouvelle solution à votre problème.