猫特殊字符含义

Rya*_*yan 8 cat

cat,我用的-A标志,我无法查找这些字符意味着任何地方。例如:

cat /proc/cpuinfo > output

cat -A output

其中一行是这样的:

processor^I: 7$
Run Code Online (Sandbox Code Playgroud)

我知道这$意味着新行,但这是什么^I意思?

什么^@意思?

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

Gil*_*il' 19

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

还有另一个使用的标准符号要少得多cat -A:非 ASCII 字节(即字节值 128 及以上)显示为,M-其后是值小于 128 的字节的表示(即高位翻转的字节值)。

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

od -t x1 /proc/cpuinfo
hd /proc/cpuinfo
Run Code Online (Sandbox Code Playgroud)

但是从 C 程序中,您可以仅用于scanf解析信息。所有 ASCII 空格都是到 的空格scanf,并且/proc您知道文件中的格式是有效的。


Ste*_*ris 7

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

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

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


Red*_*ick 5

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

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
Run Code Online (Sandbox Code Playgroud)

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

从上表可以看出,“I”字符与HT(Horizo​​ntal Tabulation,即TAB)字符在同一行。

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

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

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


thr*_*rig 3

使用十六进制查看器:

% 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.: |
% 
Run Code Online (Sandbox Code Playgroud)

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