Используя только инструменты оболочки, как можно редактировать двоичный поток, содержащий NULL (0x00 символов), сохраняя 0x00 символов в выходном потоке?
При редактировании необходимо заменить символ в указанной позиции на другой символ (в следующем примере символом '|'), например:
dd ibs=1 skip=$offset count=$reglen status=none if=$ARQ |
sed 's/./\|/2' |
sed 's/./\|/5' #| more replacements....
Но sed удаляет все символы \ 0x00 перед заменой.
РЕДАКТИРОВАТЬ - Демонстрация поведения sed в моей среде с помощью теста @George Vasiliou:
$ 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
Моя среда - AIX 7.1, а sed - не версия gnu.
Ты уверен ? с помощью простого теста это, кажется, не происходит в моем случае (gnu sed 4.2.2)
При дальнейшем тестировании ноль будет потерян, если вы замените 6-й символ в моих тестах (нулевая позиция):
источник
Попробуйте клон bbe - sed для двоичных потоков: https://sourceforge.net/projects/bbe/
источник