sed에서 null 바이트 (␀, NUL, \ 0)를 감지하는 방법이 있습니까?


15

이진 파일을 fuzzily 감지하기 위해 다른 질문 과 관련하여 ␀ 바이트를 감지하는 방법이 sed있습니까?


GNU sed에서 그렇습니다. 그러나 많은 유니 세에서 텍스트 유틸리티는 널 바이트를 처리 할 수 ​​없습니다.
Gilles 'SO- 악한 중지'

답변:


17

예:

NUL 바이트를 보낸 다음 줄 바꿈을 증명합니다.

$ echo -e \\0 | hexdump -C
00000000  00 0a                                             |..|
00000002

이제 NUL 바이트를 !느낌표로 변경합니다 .

$ echo -e \\0 | sed 's/\x00/!/' | hexdump -C
00000000  21 0a                                             |!.|

따라서 트릭은 \x00NUL 바이트로 사용 됩니다.


3
echo -ne \\0줄 바꿈을 피할 수 있습니다 .
l0b0

교체 hexdump -Cuniname -bcepu는 덤프하는 문자를 볼 수 있습니다.
l0b0

6
\x비표준 sed확장 이라고 언급해야 하지만 GNUsed 는이를 제공합니다.
jw013

6
또한 언급되어야한다 echo -eA는 bashism . printf훨씬 더 호환됩니다.
jofel

7

예, 패턴 \x00이 널 바이트와 일치합니다.

예:

$ printf "\0\n\0\n" > file
$ sed -e 's/\x00/test/' -i file
$ cat file
test
test
$  

@ l0b0 : 그것이 나를 위해 일한 이유는 zsh를 사용했기 때문입니다. POSIX 에 따르면 \00 바이트로 대체 됩니다. 이 대체는 필요하지 않으며 ( "지원해야 함") 실제로 bash는이를 직접 지원하지 않습니다. 이를 위해서는을 사용해야 echo -e합니다. 나는 대체 echo와 함께 printf... 더 호환 될 것으로 보인다 내 대답에
jofel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.