특수 문자 NUL을 grep하는 방법 (^ @ ^ @ ^ @)


26

파일:

O000000667520994000000074720121112000000N^@^@^@ 

아래 명령을 사용했지만 작동하지 않습니다.

grep "^@^@^@" *
linux  unix 

답변:


52

perl-regexp 모드 (-P)의 제어 / 인쇄 불가능 문자를 포함한 모든 문자는 16 진 코드로 grep 할 수 있습니다.

grep -Pa '\x00' ...

5
-a옵션 을 추가하고 싶을 수도 있습니다 . 그렇지 않으면 grep이진 데이터라고 생각하고 일치하는 줄을 표시하지 않습니다.
— mpy

파일에 ASCII = 0 바이트 만 포함되어 있는지 확인할 방법을 찾을 수 없습니다 grep -Pv '\x00' file. Cygwin에서 작동하지 않습니다 ...
— pbies

@mpy Without -a(때로는?) 패턴조차 찾지 못합니다. 감사! @pbies도 도울 수 있습니다.
— Michel de Ruiter

13

^@캐럿 ^및 기호 가 아니며 @하나의 문자입니다. 일부 프로그램 \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-은 @널 바이트를 삽입합니다.


3

경우 grep -P작업 (예 : OS X에서)를하지 않는,이 시도 :

grep -E '\x00' ...

이것이 효과가 있습니까? 나는 내 버전으로하지 않습니다 : grep (GNU grep) 2.14
— guettli

3
이 답변은 BSD grep에 대한 grep -Pa '\x00' ...
— 것이며

1

bash에서 C-q또는 접두사를 붙일 때 특수 문자를 추가 할 수 있습니다 C-v. 예를 들어

grep 'Ctrl-vCtrl-a' file.txt

검색 문자열로 읽어야 control key+ character v이어 control key+ character a어느 ASCII 값 SOH (01)를 검색. 불행히도 이것은 NUL 캐릭터에게는 작동하지 않습니다.


아마도 당신은 실제로 그러한 문자 순서가 문자 그대로 쓰여 져야한다는 것을 의미하지는 않지만 키보드에 논리적으로 입력되어야합니까?
— Monica와의 가벼움 경주

물론입니다. 이것은 Ctrl 키를 누른 상태에서 v를 누른 다음 Control 키를 누른 상태에서 a를 누릅니다.
— Olaf Dietsche

나는 당신의 대답이 명확하지 않다고 생각합니다.
— Monica와의 가벼움 경주

@LightnessRacesinOrbit 힌트 주셔서 감사합니다. 나는 대답을 명확히하려고 노력했다.
— 올라프 Dietsche

@JohnKugelman 편집 해 주셔서 감사합니다. 도움을 더 자세히 살펴 봐야 할 것 같습니다.
— 올라프 Dietsche


-3

^ ^ 문자는 NUL 문자이므로 직접 그 리핑 할 수 없습니다.

가장 좋은 방법은 아마도이 바이트 시퀀스를 검색하는 간단한 프로그램을 작성하는 것입니다.

또는 16 진수 덤프 ( od, xxd등) 형식으로 변환 하여 그 결과를 grep 하려고 시도 할 수 있습니다 . 그러나 솔직히 말해서, 그것을 올바르게 얻는 것은 까다로울 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.