仅使用shell工具,如何编辑包含NULL(0x00字符)的二进制流,并将0x00字符保留在输出流中?
编辑需要将指定位置的一个字符替换为另一个字符(在下面的示例中,用字符'|'代替),例如:
dd ibs=1 skip=$offset count=$reglen status=none if=$ARQ |
sed 's/./\|/2' |
sed 's/./\|/5' #| more replacements....
但是sed会在替换前删除所有'\ 0x00'字符。
编辑-使用@George Vasiliou测试演示我环境中的sed行为:
$ 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版本。