아래 표현을 찾으려고 할 때.
$ 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
(특수 문자를 이스케이프해야 함).