#!/bin/sh sed -i 's/.$//' $1 Leider scheint das . nicht auf NULL anzusprechen.
Willst du das letzte Byte der gesamten Datei entfernen, oder das letzte Byte jeder Zeile?
Wenn es nur das allerletzte Byte wegnehmen soll, muß man sed sagen, daß es nur die letzte Zeile anfassen soll ($ als Adressangabe vor dem s...):
1 | if [ "$1" != "" ] |
2 | then |
3 | sed -i -e "\$s/.$//" $1 |
4 | else |
5 | echo mangels Argument nichts zu tun |
6 | fi |
dd ist aber sicher geeigneter bei Binärdateien; sed arbeitet zeilenweise. Oder man rechnet und nimmt head -c ...
Klappt nicht, das . ist kein Match mit 0x00 head --bytes=-1 $1 > out funktioniert auch ohne rechnen (stat -c %s $1) allerdings müsste man das inputfile irgendwie überschreiben können.. vielleicht so cat $1 | head --bytes=-1 > $1
Eine andere Möglichkeit wäre das Programm "truncate", das seit kurzem in den coreutils ist: http://www.gnu.org/software/coreutils/manual/coreutils.html#truncate-invocation
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.