有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您知道文件中的格式是有效的。
在这种情况下,^被用作“控制”的捷径。所以^A表示“control-A”,即ASCII字符1。 ^I表示control-I或ASCII 9,也称为TAB. ^@因此是 ASCII 00 或 NUL 字符。
这些字符通常被称为“控制字符”。
您可能还会看到M-;这意味着“元”并意味着设置了最高位(将 128 添加到以下字符的 ASCII 值)。
作为附录,其他答案并没有完全明确字母和控制字符之间的关系
该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(Horizontal Tabulation,即TAB)字符在同一行。
现在我们可以把这个字符写成CTRL+,I但在过去更常见的是把它缩写为^I
从表中您还可以看到“@”与“NUL”在同一行,因此^@代表 NUL,即空字符 0x00。
表中的排列说明分配给这些 ASCII 字符的数值(“代码点”)是这样的:每个字母都是 0x40 加上相应控制字符的值。
使用十六进制查看器:
% 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或水平选项卡。