Die Lösung habe ich hier gefunden.
#!/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
WICHTIG:Stellen Sie sicher, dass Sie das Recht haben, das Skript auszuführen und zu lesen!chmod 555 script
NUTZUNG:
./script text_with_newline OUTPUT: Newline at end of file!
./script text_without_newline OUTPUT: No Newline at end of file!
Geben Sie einfach ein:
cat -e nameofyourfile
Wenn es einen Zeilenumbruch gibt, endet dieser mit $
Symbol. Wenn nicht, endet es mit einem %
Symbol.
Die Antwort von Olivier Pirson ist ordentlicher als die, die ich ursprünglich hier gepostet habe (sie behandelt auch leere Dateien korrekt). Ich habe meine Lösung so bearbeitet, dass sie mit seiner übereinstimmt.
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
}
Als Shell-Skript, das Sie aufrufen können (in eine Datei einfügen, chmod +x <filename>
um es ausführbar zu machen):
#!/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
Die \Z
Meta-Zeichen bedeutet das absolute Ende der Zeichenkette.
if (preg_match('#\n\Z#', file_get_contents('foo.txt'))) {
echo 'New line found at the end';
}
Hier sehen Sie also eine neue Zeile am absoluten Ende der Zeichenfolge. file_get_contents
fügt am Ende nichts hinzu. ABER es wird die gesamte Datei in den Speicher laden; Wenn Ihre Datei nicht zu groß ist, ist es in Ordnung, andernfalls müssen Sie eine neue Lösung für Ihr Problem finden.