Arquivo:
O000000667520994000000074720121112000000N^@^@^@
Eu usei o comando abaixo, mas ele não funciona.
grep "^@^@^@" *
Você pode grep para qualquer caractere incluindo caracteres de controle / não imprimíveis no modo perl-regexp (-P) pelo seu código hexadecimal:
grep -Pa '\x00' ...
-a
opção, caso contrário,grep
considera dados binários e não exibirá as linhas correspondentes.grep -Pv '\x00' file
não funciona no Cygwin ...-a
(às vezes?), ele nem encontra o padrão. Obrigado! Pode ajudar os @pbies também.^@
não é um quilate^
e arroba@
, é um personagem. É como alguns programas exibem o caractere NUL - valor ASCII 0, também conhecido como\0
em C.Aqui eu criei um arquivo com um byte NUL. † Observe que eu uso
cat -v
para mostrar caracteres não imprimíveis.O Grep tem problemas para encontrar NULs, pois eles são usados para terminar seqüências de caracteres em C. Sed, no entanto, pode fazer o trabalho:
† No vi, no modo de inserção, pressione Ctrl- V, Ctrl- Shift- @para inserir um byte nulo.
fonte
Se
grep -P
não funcionar (por exemplo, no OS X), tente o seguinte:fonte
grep -Pa '\x00' ...
No bash, você pode adicionar caracteres especiais quando prefixado com
C-q
ouC-v
. Então você pode, por exemploA cadeia de pesquisa deve ser lida como
control key
+character v
, seguida porcontrol key
+character a
, que procura pelo valor ASCII SOH (01). Infelizmente, isso não funciona para o personagem NUL.fonte
^ @ é o caractere NUL. O que você deseja fazer com as linhas dos seus arquivos que o contêm?
Você pode dar uma olhada em /programming/2398393/identifying-and-removing-null-characters-in-unix, que trata de um problema semelhante.
fonte
O caractere ^ @ é o caractere NUL, portanto, receio que ele não possa ser recebido diretamente.
Sua melhor opção seria provavelmente escrever um programa simples que procure por essa sequência de bytes.
Alternativamente, você pode tentar convertê-lo em algum tipo de despejo hexadecimal (
od
,xxd
ou algo assim) e grep para a saída dele. Mas, francamente falando, seria complicado acertar.fonte