Encontré la solución aquí.
#!/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:¡Asegúrese de tener los derechos para ejecutar y leer el script!chmod 555 script
USO:
./script text_with_newline OUTPUT: Newline at end of file!
./script text_without_newline OUTPUT: No Newline at end of file!
Solo escribe:
cat -e nameofyourfile
Si hay una nueva línea, terminará con $
símbolo. Si no, terminará con un %
símbolo.
La respuesta de Olivier Pirson es más clara que la que publiqué aquí originalmente (también maneja correctamente los archivos vacíos). Edité mi solución para que coincida con la suya.
En 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
}
Como un script de shell al que puede llamar (péguelo en un archivo, chmod +x <filename>
para hacerlo ejecutable):
#!/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
El \Z
meta-carácter significa el final absoluto de la cadena.
if (preg_match('#\n\Z#', file_get_contents('foo.txt'))) {
echo 'New line found at the end';
}
Así que aquí estás viendo una nueva línea al final absoluto de la cadena. file_get_contents
no añadirá nada al final. PERO cargará todo el archivo en la memoria; si su archivo no es demasiado grande, está bien, de lo contrario tendrá que traer una nueva solución a su problema.