Utilizzando solo strumenti di shell, come si può modificare un flusso binario contenente NULL (0x00 caratteri) mantenendo i caratteri 0x00 nel flusso di output?
La modifica deve sostituire un carattere in una posizione specificata con un altro carattere (nel seguente esempio il carattere '|'), come ad esempio:
dd ibs=1 skip=$offset count=$reglen status=none if=$ARQ |
sed 's/./\|/2' |
sed 's/./\|/5' #| more replacements....
Ma sed sta rimuovendo tutti i caratteri "\ 0x00" prima della sostituzione.
EDIT - Dimostrazione del comportamento sed nel mio ambiente usando il test @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
Il mio ambiente è un AIX 7.1 e il sed che c'è non è la versione gnu.