Ist es möglich, die letzte Zeile einer Datei mit einem Befehl zu löschen?

Ist es möglich, die letzte Zeile einer Datei mit einem Befehl zu löschen?

Ich habe versehentlich eine Zeile in /etc/crontab auf vielen Servern verteilt und dabei festgestellt, dass diese Zeile einen Tippfehler enthält und ich sie auf allen Servern ändern muss.

Antwort1

Eine andere Möglichkeit besteht darin, den Tippfehler zu korrigieren, anstatt nur die letzte Zeile zu löschen

sed -i '$ s/typotext/correcttext/ /var/spool/cron/user

Sie sollten die Crontab-Dateien für neuere Cron-Versionen direkt bearbeiten können, da jede Minute nach Änderungen gesucht wird.

Antwort2

Wenn Ihr sed die Bearbeitung direkt unterstützt, dann

sed -i '$d' file

Andernfalls müssen Sie einen zusammengesetzten Befehl verwenden, wie etwa:

cat file | sed '$d' > newfile; mv newfile file

Antwort3

verwendenhead

user@host$ cat <<EOF > test.txt
1
2
3
4
EOF
user@host$ head -n -1 test.txt | sponge test.txt
user@host$ cat test.txt
1
2
3
user@host$

Antwort4

Die Antwort finden Sie in diesem Forumsartikel auf unix.com:

http://www.unix.com/shell-programming-scripting/25027-delete-last-line.html

sed -e '$d' Eingabedatei > Ausgabedatei

oder

head -$(( wc -l file | awk '{print $1}'- 1)) Datei

verwandte Informationen