Arquivo:
O000000667520994000000074720121112000000N^@^@^@
Eu usei o comando abaixo, mas ele não funciona.
grep "^@^@^@" *
Arquivo:
O000000667520994000000074720121112000000N^@^@^@
Eu usei o comando abaixo, mas ele não funciona.
grep "^@^@^@" *
Respostas:
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' ...
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.
$ 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
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:
$ sed -n '/\x0/p' blah
null
$ sed -n '/\x0/p' blah | cat -v
null^@
† No vi, no modo de inserção, pressione Ctrl- V, Ctrl- Shift- @para inserir um byte nulo.
No bash, você pode adicionar caracteres especiais quando prefixado com C-q
ou C-v
. Então você pode, por exemplo
grep 'Ctrl-vCtrl-a' file.txt
A cadeia de pesquisa deve ser lida como control key
+ character v
, seguida por control key
+ character a
, que procura pelo valor ASCII SOH (01). Infelizmente, isso não funciona para o personagem NUL.
^ @ é 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.
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.
-a
opção, caso contrário,grep
considera dados binários e não exibirá as linhas correspondentes.