Quando tento grep a expressão abaixo.
$ grep -A2 "IPv6: ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready" log.txt
Eu obtenho o resultado como -
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
Agora, o @@@@
representa uma falha do sistema, acredito, como posso grep apenas '@^@'.
Eu tentei grep @^ file.txt
, grep '@^' file.txt
e grep '@.*@.*@' file.txt
algumas outras expressões sem sorte.
Quando o sistema é reinicializado sem que os arquivos sejam liberados primeiro, é possível que um arquivo que está sendo gravado tenha o novo tamanho, mas os dados ainda não foram gravados no disco.
Nesse caso, o buraco no arquivo conterá caracteres NUL. (Também é possível criar deliberadamente arquivos com buracos sem reiniciar, mas não acho que isso seja aplicável ao seu cenário.)
Algumas ferramentas exibirão caracteres NUL como
^@
um espaço reservado para um único caractere não imprimível e é totalmente diferente de^
seguido por um@
, e é por isso que seu comando grep não funcionará.Com essa informação, consegui encontrar uma resposta em um site irmão. A solução sugerida é usar os seguintes argumentos para grep:
Eu testei que isso funciona para mim. Observe que usar
-P
ou-a
sozinho não funciona, você precisa de ambos antes de\x00
funcionar.Se você procurar apenas por linhas com "@^@" você pode usar
grep "\@\^\@" file.txt
(você tem que escapar dos caracteres especiais).