O que significa ^ @ ^ @ ^ @ em um arquivo de texto?

2

Às vezes, tenho problemas para abrir um arquivo usando um editor de texto gráfico - estou usando geany . O arquivo pode ser lido por vim sem nenhum problema. Eu verifiquei o arquivo, e não havia nada de errado com isso, exceto algumas linhas. Este é, por exemplo, .bash_history file:

 776 reboot
 777 ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^     @^@^@^@^@^@^@geany /etc/fstab
....
....
 823 reboot 
 824 ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@exit

Não sei o que é ^@ , mas depois de remover cada linha que o contém, o arquivo pode ser lido novamente em geany . Talvez a ação de reinicialização tenha algo a ver com isso? Mas eu tenho outras reboot entradas no arquivo e os caracteres ^@ aparecem somente em dois ou três lugares.

Este é apenas um arquivo de exemplo, eu vi os caracteres em alguns outros arquivos, uma coisa parece ser a mesma - diz respeito apenas a arquivos grandes, aqueles que possuem muitas linhas.

Alguém sabe o que ^@ significa, de onde veio e por que vim não tem problemas com a leitura do arquivo, enquanto geany não consegue lê-lo?

    
por Mikhail Morfikov 08.01.2014 / 05:13

1 resposta

4

Sempre que você tiver caracteres perdidos em um arquivo, poderá solicitar a ajuda das ferramentas od ou hexdump .

Exemplos

Primeiro, mostraremos o que o despejo octal ( od ) mostra quando o informamos para despejar o conteúdo do arquivo a.txt em um formato hexadecimal ( -x ).

od

$ od -x a.txt 
0000000 3737 2036 6572 6f62 746f 370a 3737 0020
0000020 0000 0000 0000 0000 0000 0000 0000 0000
*
0000140 0000 0000 0000 0000 0000 0000 0000 6567
0000160 6e61 2079 652f 6374 662f 7473 6261 380a
0000200 3332 7220 6265 6f6f 2074 380a 3432 0020
0000220 0000 0000 0000 0000 0000 0000 0000 0000
*
0000320 7865 7469 000a
0000325

Podemos usar hexdump para fazer algo semelhante, mostrando os dados em formato hexadecimal, no entanto, ele também mostrará o valor como um caractere ASCII, se possível.

hexdump

$ hexdump -C a.txt 
00000000  37 37 36 20 72 65 62 6f  6f 74 0a 37 37 37 20 00  |776 reboot.777 .|
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000060  00 00 00 00 00 00 00 00  00 00 00 00 00 00 67 65  |..............ge|
00000070  61 6e 79 20 2f 65 74 63  2f 66 73 74 61 62 0a 38  |any /etc/fstab.8|
00000080  32 33 20 72 65 62 6f 6f  74 20 0a 38 32 34 20 00  |23 reboot .824 .|
00000090  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000000d0  65 78 69 74 0a                                    |exit.|
000000d5

Olhando para a saída acima, você notará várias seqüências de 00 00 00 . Esses são os caracteres ^ @ sobre os quais você estava perguntando originalmente.

Aliás, o caractere 00 é o caractere nulo.

    
por 08.01.2014 / 08:30

Tags