Usando apenas ferramentas shell, como um fluxo binário contendo NULLs (caracteres 0x00) pode ser editado, mantendo os caracteres 0x00 no fluxo de saída?
A edição precisa substituir um caractere em uma posição especificada por outro caractere (no exemplo a seguir, pelo caractere '|'), como:
dd ibs=1 skip=$offset count=$reglen status=none if=$ARQ |
sed 's/./\|/2' |
sed 's/./\|/5' #| more replacements....
Mas o sed está removendo todos os caracteres '\ 0x00' antes da substituição.
EDIT - Demonstração de comportamento sed no meu ambiente usando o teste @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
Meu ambiente é um AIX 7.1 e o sed que existe não é a versão gnu.
Você tem certeza ? com um teste simples, isso não parece acontecer no meu caso (gnu sed 4.2.2)
Com mais testes, o nulo será perdido se você substituir o sexto caractere em meus testes (posição nula):
fonte
Tente bbe - sed clone para fluxos binários: https://sourceforge.net/projects/bbe/
fonte