파일에서 "^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@"을(를) 찾으려면 어떻게 해야 합니까?

파일에서 "^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@"을(를) 찾으려면 어떻게 해야 합니까?

아래 표현을 찾으려고 할 때.

$ grep -A2 "IPv6: ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready" log.txt

내가 얻는 결과는 -

date-time kern servname: []: info [   83.262033] IPv6: ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@date-time syslog servname syslog-ng[10831]: notice syslog-ng starting up; version='3.2.5'
date-time kern servname: []: info [    0.000000] Initializing cgroup subsys cpuset

@@@@이제 이것이 시스템 충돌을 의미한다고 생각합니다 . "@^@"을 얻기 위해 어떻게 grep할 수 있습니까?

grep @^ file.txt, grep '@^' file.txt, grep '@.*@.*@' file.txt그리고 몇 가지 다른 표현을 시도했지만 성공하지 못했습니다.

답변1

먼저 파일을 플러시하지 않고 시스템을 다시 시작하면 기록 중인 파일의 크기가 달라질 수 있지만 데이터는 아직 디스크에 기록되지 않은 것입니다.

이 경우 파일의 취약점에는 NUL 문자가 포함됩니다. (재부팅하지 않고 의도적으로 취약한 파일을 생성하는 것도 가능하지만 귀하의 시나리오에는 적용되지 않는 것 같습니다.)

^@일부 도구는 인쇄할 수 없는 단일 문자에 대한 자리 표시자인 NUL 문자를 표시합니다. 이는 ^뒤에 오는 문자와 완전히 다르므로 @grep 명령이 작동하지 않습니다.

이 정보를 통해 나는 다음을 찾을 수 있었습니다.답변자매 사이트에서. 제안된 해결 방법은 grep에 다음 매개변수를 사용하는 것입니다.

grep -Pa '\x00'

나는 이것을 테스트했고 그것은 나에게 효과적입니다. 둘 중 하나만으로는 작동하지 않으므로 -P-a 다 함께 사용해야 \x00작동합니다.

답변2

"@^@"이 있는 줄만 검색하는 경우 사용할 수 있습니다 grep "\@\^\@" file.txt(특수 문자를 이스케이프해야 함).

관련 정보