En utilisant uniquement des outils shell, comment un flux binaire contenant des NULL (caractères 0x00) peut-il être modifié en conservant les caractères 0x00 dans le flux de sortie?
L'édition doit remplacer un caractère dans une position spécifiée pour un autre caractère (dans l'exemple suivant par le caractère '|'), comme:
dd ibs=1 skip=$offset count=$reglen status=none if=$ARQ |
sed 's/./\|/2' |
sed 's/./\|/5' #| more replacements....
Mais sed supprime tous les caractères '\ 0x00' avant le remplacement.
EDIT - Démonstration du comportement des sed dans mon environnement à l'aide du 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
Mon environnement est un AIX 7.1 et le sed qui s'y trouve n'est pas la version gnu.
Êtes-vous sûr ? avec un simple test cela ne semble pas se produire dans mon cas (gnu sed 4.2.2)
Avec d'autres tests, null sera perdu si vous remplacez le 6ème caractère dans mes tests (position null):
la source
Essayez le clone bbe-sed pour les flux binaires: https://sourceforge.net/projects/bbe/
la source