猫特殊字符的含义

猫特殊字符的含义

对于cat,我使用了该-A标志,但我在任何地方都找不到这些字符的含义。例如:

cat /proc/cpuinfo > output

cat -A output

其中一行是这样的:

processor^I: 7$

我知道$新线的意思,但是是什么^I意思呢?

这是什么^@意思?

我试图弄清楚 cpuinfo 吐出什么类型的空白,以便我可以在我的 C 程序中删除它们,但我很难做到这一点。

答案1

^I^@使用常见的“插入符号”符号控制字符^I表示ASCII字符control-I,即字符9,是制表符。^@表示ASCII字符control-@,即字符0,在C中是字符串结束符。一般形式为其中是大写字母或其中之一,表示值为负64的字节;并表示字节值127(这是加64的字节值)。^cc@[\]^_c^??

还有另一种不太标准的表示法cat -A:非 ASCII 字节(即字节值 128 及以上)显示如下,M-后面跟着其值小于 128 的字节的表示形式(即高位翻转的字节值)。

cat -A不是理解视觉上模糊的输出的最佳方式。十六进制转录本可为您提供更精确的信息,例如

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

但在 C 程序中,您可以用来scanf解析信息。所有 ASCII 空白都是 的空白scanf,并且对于 中的文件,/proc您知道该格式将是有效的。

答案2

在这种情况下,^“控制”被用作“控制”的捷径。 So^A表示“control-A”,即 ASCII 字符 1。 ^I表示control-I或 ASCII 9,也称为TAB^@因此是 ASCII 00 或 NUL 字符。

这些字符通常称为“控制字符”。

您可能还会看到M-;这意味着“元”,并且意味着设置了最高位(将 128 添加到后续字符的 ASCII 值)。

答案3

作为附录,其他答案并没有完全清楚字母和控制字符之间的关系

ASCII 字符集可以显示在这样的表格中

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

您可能知道,可以通过按标有 的键盘键将名为 TAB 的控制字符插入到文档中TAB。您可能还知道,按住 键CTRL并按也可以实现同样的效果I。这控制键标签CTRL作为输入 ASCII 的一种方式而存在控制字符

从上表可以看出,“I”字符与HT(水平制表,即TAB)字符在同一行。

现在我们可能把这个字符写成CTRL+ I,但在过去更常见的是将其缩写为^I

从表中还可以看到“@”与“NUL”在同一行,因此^@代表NUL,即空字符0x00。

表中的排列说明了分配给这些 ASCII 字符的数值(“代码点”),每个字母都是 0x40 加上相应控制字符的值。

答案4

使用十六进制查看器:

% 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.: |
% 

然后查阅ascii(7)或类似的表格来查找特定的代码,在这里09或水平选项卡。

相关内容