cat significado de caracteres especiais

6

com cat , uso o sinal -A e não consigo encontrar o que esses caracteres significam em nenhum lugar. Por exemplo:

cat /proc/cpuinfo > output

cat -A output

Uma das linhas é esta:

processor^I: 7$

Eu sei que $ significa nova linha, mas o que significa ^I ?

O que significa ^@ ?

Estou tentando descobrir que tipo de espaço em branco o cpuinfo cria para que eu possa retirá-los do meu programa em C, mas estou tendo dificuldades para fazer isso.

    
por Ryan M 25.08.2016 / 00:31

4 respostas

19

^I e ^@ usam a notação comum "caret" para caracteres de controle . ^I significa o caractere de controle ASCII-I, ou seja, o caractere 9, que é uma tabulação. ^@ significa o caractere ASCII control- @, ou seja, caractere 0, que em C é o caractere final da cadeia. A forma geral é ^c , em que c é uma letra maiúscula ou uma de @[\]^_ , representando o byte cujo valor é igual a c menos 64; e ^? representando o valor de byte 127 (que é o valor de byte de ? mais 64).

Existe outra, muito menos notação padrão usada por cat -A : bytes não-ASCII (isto é, valores de byte 128 e acima) são mostrados como M- seguido pela representação do byte cujo valor é 128 por menos (isto é, o valor de byte com o bit superior invertido).

cat -A não é a melhor maneira de entender a saída visualmente ambígua. Um transcrito hexadecimal fornece informações mais precisas, por exemplo,

od -t x1 /proc/cpuinfo
hd /proc/cpuinfo

Mas a partir de um programa em C, você pode usar apenas scanf para analisar as informações. Todo espaço em branco ASCII é espaço em branco para scanf e, com arquivos em /proc , você sabe que o formato será válido.

    
por 25.08.2016 / 00:56
7

Neste contexto, o ^ está sendo usado como um atalho para "controle". Portanto, ^A significa "control-A", que é o caractere ASCII 1. ^I significa control-I ou ASCII 9, também conhecido como TAB . ^@ é por isso ASCII 00 ou o caractere NUL.

Esses caracteres são comumente conhecidos como "caracteres de controle".

Você também pode ver M- ; isso significa "meta" e significa que o bit superior está definido (adicione 128 ao valor ASCII do caractere seguinte).

    
por 25.08.2016 / 00:52
4

Como um adendo, as outras respostas não esclarecem completamente a relação entre letras e caracteres de controle

O conjunto de caracteres ASCII pode ser exibido em uma tabela como esta

NUL   SP  @  '
SOH   !   A  a
STX   "   B  b
ETX   #   C  c
EOT   $   D  d
ENQ   %   E  e
ACK   &   F  f
BEL   '   G  g
BS    (   H  h
HT    )   I  i
LF    *   J  j
VT    +   K  k
FF    ,   L  l
CR    -   M  m
SO    .   N  n
SI    /   O  o
DL    0   P  p
DC1   1   Q  q
DC2   2   R  r
DC3   3   S  s
DC4   4   T  t
NAK   5   U  u
SYN   6   V  v
ETB   7   W  w
CAN   8   X  x
EM    9   Y  y
SUB   :   Z  z
ESC   ;   [  {
FS    <   \  |
GS    =   ]  }
RS    >   ^  ~
US    ?   _  DEL

Você pode saber que o caractere de controle chamado TAB pode ser inserido em um documento pressionando a tecla do teclado denominada TAB . Você também pode estar ciente de que pode conseguir a mesma coisa mantendo pressionada a tecla CTRL e pressionando I . A chave de controle identificada CTRL existe como uma maneira de inserir caracteres de controle do ASCII.

Você pode ver na tabela acima que o caractere "I" está na mesma linha que o caractere HT (tabulação horizontal, ou seja, TAB).

Hoje em dia podemos escrever este caractere como CTRL + I mas no passado era mais comum abreviar isto como ^I

Da tabela, você também pode ver que "@" está na mesma linha que "NUL" e, portanto, ^@ representa NUL, o caractere nulo 0x00.

O arranjo na tabela ilustra que o valor numérico ("ponto de código") atribuído a esses caracteres em ASCII é tal que cada uma das letras é 0x40 mais o valor do caractere de controle correspondente.

    
por 25.08.2016 / 13:02
3

Use um visualizador hexadecimal:

% hexdump -C /proc/cpuinfo | sed -n /processor/p
00000000  70 72 6f 63 65 73 73 6f  72 09 3a 20 30 0a 76 65  |processor.: 0.ve|
00000340  74 3a 0a 0a 70 72 6f 63  65 73 73 6f 72 09 3a 20  |t:..processor.: |
% 

Em seguida, consulte ascii(7) ou uma tabela semelhante para pesquisar quais códigos específicos, aqui 09 ou guia horizontal.

    
por 25.08.2016 / 00:35

Tags