Usando solo herramientas de shell, ¿cómo se puede editar una secuencia binaria que contiene NULL (caracteres 0x00) manteniendo los caracteres 0x00 en la secuencia de salida?
La edición debe reemplazar un carácter en una posición especificada por otro carácter (en el siguiente ejemplo por el carácter '|'), como:
dd ibs=1 skip=$offset count=$reglen status=none if=$ARQ |
sed 's/./\|/2' |
sed 's/./\|/5' #| more replacements....
Pero sed está eliminando todos los caracteres '\ 0x00' antes del reemplazo.
EDITAR - Demostración del comportamiento de sed en mi entorno utilizando la prueba @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
Mi entorno es un AIX 7.1 y el sed que está allí no es la versión gnu.
Estás seguro ? con una prueba simple, esto no parece suceder en mi caso (gnu sed 4.2.2)
Con más pruebas, se perderá nulo si reemplaza el sexto carácter en mis pruebas (posición nula):
fuente
Pruebe bbe - sed clone para secuencias binarias: https://sourceforge.net/projects/bbe/
fuente