对于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的字节值)。^c
c
@[\]^_
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
或水平选项卡。