Wie kann ein Binärstrom mit NULL-Zeichen (0x00 Zeichen) mit nur Shell-Tools bearbeitet werden, wobei die 0x00-Zeichen im Ausgabestream erhalten bleiben?
Die Bearbeitung muss ein Zeichen an einer bestimmten Position durch ein anderes Zeichen ersetzen (im folgenden Beispiel durch das Zeichen '|'), wie folgt:
dd ibs=1 skip=$offset count=$reglen status=none if=$ARQ |
sed 's/./\|/2' |
sed 's/./\|/5' #| more replacements....
Aber sed entfernt alle '\ 0x00'-Zeichen vor dem Austausch.
EDIT - Demonstration des Sed-Verhaltens in meiner Umgebung mit dem @ George Vasiliou-Test:
$ echo -e "lineA\nlineB\nlineC" | tr '\n' '\0' | od -t x1
0000000 6c 69 6e 65 41 00 6c 69 6e 65 42 00 6c 69 6e 65
0000020 43 00
0000022
$ echo -e "lineA\nlineB\nlineC" | tr '\n' '\0' | sed 's/./|/5' | od -t x1
0000000 6c 69 6e 65 7c 6c 69 6e 65 42 6c 69 6e 65 43
0000017
Meine Umgebung ist eine AIX 7.1 und das Sed, das es gibt, ist nicht die Gnu-Version.
Bist du sicher ? mit einem einfachen Test scheint dies in meinem Fall nicht zu passieren (gnu sed 4.2.2)
Bei weiteren Tests geht null verloren, wenn Sie das 6. Zeichen in meinen Tests ersetzen (Nullposition):
quelle
Versuchen Sie bbe - sed clone für binäre Streams: https://sourceforge.net/projects/bbe/
quelle