Ho trovato la soluzione qui.
#!/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
 IMPORTANTE:assicurati di avere il diritto di eseguire e leggere lo script!chmod 555 script 
UTILIZZO:
./script text_with_newline        OUTPUT: Newline at end of file!
./script text_without_newline     OUTPUT: No Newline at end of file!
Basta digitare:
cat -e nameofyourfile
 Se c'è una nuova riga, terminerà con $ symbol.In caso contrario, terminerà con un % simbolo.
La risposta di Olivier Pirson è più ordinata di quella che ho pubblicato qui originariamente (gestisce correttamente anche i file vuoti). Ho modificato la mia soluzione in modo che corrisponda alla sua.
In bash:
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
}
 Come uno script di shell che puoi chiamare (incollalo in un file, chmod +x <filename> per renderlo eseguibile):
#!/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
 Il \Z meta-carattere indica la fine assoluta della stringa.
if (preg_match('#\n\Z#', file_get_contents('foo.txt'))) {
    echo 'New line found at the end';
}
 Quindi qui stai guardando una nuova riga alla fine assoluta della stringa. file_get_contents non aggiungerà nulla alla fine. MA caricherà l'intero file in memoria; se il tuo file non è troppo grande, va bene, altrimenti dovrai portare una nuova soluzione al tuo problema.