파일:
O000000667520994000000074720121112000000N^@^@^@
아래 명령을 사용했지만 작동하지 않습니다.
grep "^@^@^@" *
파일:
O000000667520994000000074720121112000000N^@^@^@
아래 명령을 사용했지만 작동하지 않습니다.
grep "^@^@^@" *
답변:
perl-regexp 모드 (-P)의 제어 / 인쇄 불가능 문자를 포함한 모든 문자는 16 진 코드로 grep 할 수 있습니다.
grep -Pa '\x00' ...
grep -Pv '\x00' file
. Cygwin에서 작동하지 않습니다 ...
-a
(때로는?) 패턴조차 찾지 못합니다. 감사! @pbies도 도울 수 있습니다.
^@
캐럿 ^
및 기호 가 아니며 @
하나의 문자입니다. 일부 프로그램 \0
은 C 로 알려진 NUL 문자 —ASCII 값 0을 표시하는 방법 입니다.
여기에 NUL 바이트가있는 파일을 만들었습니다. †cat -v
인쇄하지 않는 문자를 표시 하는 데 사용 합니다.
$ cat -v blah
hello
null^@
hi
$ hexdump -C blah
00000000 68 65 6c 6c 6f 0a 6e 75 6c 6c 00 0a 68 69 0a |hello.null..hi.|
0000000f
Grep은 C에서 문자열을 종료하는 데 사용되므로 NUL을 찾는 데 문제가 있습니다. 그러나 Sed는 다음 작업을 수행 할 수 있습니다.
$ sed -n '/\x0/p' blah
null
$ sed -n '/\x0/p' blah | cat -v
null^@
† 에서 VI, 삽입 모드 언론 Ctrl- V, Ctrl- Shift-은 @널 바이트를 삽입합니다.
bash에서 C-q
또는 접두사를 붙일 때 특수 문자를 추가 할 수 있습니다 C-v
. 예를 들어
grep 'Ctrl-vCtrl-a' file.txt
검색 문자열로 읽어야 control key
+ character v
이어 control key
+ character a
어느 ASCII 값 SOH (01)를 검색. 불행히도 이것은 NUL 캐릭터에게는 작동하지 않습니다.
^ @는 NUL 문자입니다. 파일을 포함하는 파일 라인으로 무엇을 하시겠습니까?
비슷한 문제를 다루는 https : //.com/questions/2398393/identifying-and-removing-null-characters-in-unix 를 살펴볼 수 있습니다 .
-a
옵션 을 추가하고 싶을 수도 있습니다 . 그렇지 않으면grep
이진 데이터라고 생각하고 일치하는 줄을 표시하지 않습니다.