Linux中的cat命令:基本和高级示例(3)

如您所见,第一行和最后一行未使用-b选项编号,因为它们是空的。但是第6行怎么样?为什么它仍然使用-b选项进行编号?好吧,因为它是一个空白行 - 但不是空行,我们将在下一节中看到。

-v,-e,-t:显示非打印字符

三个选项-v,-e`和`-t用于显示不同的不可见字符集。即使集合重叠,也没有“全包”选项,因此如果要显示所有不可见字符,则必须将它们组合在一起。

-v:查看不可见的字符

-v选项显示除插入符号和制表符号以外的带插入符号和元符号的所有非打印字符。

使用该选项,控制字符将显示为插入符号(^),后跟相应的ASCII字符(例如,回车符,字节13,显示为^M,因为ASCII中的M为64 + 13),以及具有高字符的字符 - 阶位设置将以“元”符号M-出现,其后是对应于7个低位的表示(例如,字节141将显示为M-^M,因为141是128 + 13)。

虽然看似深奥,但在使用二进制文件时,该功能可能很有用,例如,如果要检查嵌入在JPEG文件中的原始信息:

$ cat -v cat.jpg | fold -75 | head -10
M-^?M-XM-^?M-`^@^PJFIF^@^A^A^A^@H^@H^@^@M-^?M-~^@QFile source:
ns.wikimedia.org/wiki/File:Felis_catus-cat_on_snow.jpgM-^?M-b^LXICC_PROFILE
^@^A^A^@^@^LHLino^B^P^@^@mntrRGB XYZ ^GM-N^@^B^@    ^@^F^@1^@^@acspMSFT
^@^@^@^@IEC sRGB^@^@^@^@^@^@^@^@^@^@^@^@^@^@M-vM-V^@^A^@^@^@^@M-S-HP  ^@^@^
@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^Qcprt^@^@^AP^@^@^@3desc^@^@^AM-^D^@^@^@lwtpt^@^@^AM-p^@^@^@^
Tbkpt^@^@^B^D^@^@^@^TrXYZ^@^@^B^X^@^@^@^TgXYZ^@^@^B,^@^@^@^TbXYZ^@^@^B@^@^@
^@^Tdmnd^@^@^BT^@^@^@pdmdd^@^@^BM-D^@^@^@M-^Hvued^@^@^CL^@^@^@M-^Fview^@^@^
CM-T^@^@^@$lumi^@^@^CM-x^@^@^@^Tmeas^@^@^D^L^@^@^@$tech^@^@^D0^@^@^@^LrTRC^
@^@^D<^@^@^H^LgTRC^@^@^D<^@^@^H^LbTRC^@^@^D<^@^@^H^Ltext^@^@^@^@Copyright (

-v选项的另一个用例是查找可能泄漏到文本文件中的控制字符。 如果你还记得它,我们上面有一个奇怪的问题,-b选项编号为第6个输入行,而它看起来像是空的。 所以让我们调查一下:

$ cat -v felidae.txt
Felidae \Felidae\ n.^M
    a natural family of lithe-bodied round-headed fissiped^M
    mammals, including the cats; wildcats; lions; leopards;^M
    cheetahs; and saber-toothed tigers.^M
^M
    Syn: family {Felidae}.^M
          [WordNet 1.5]^M

啊啊! 你看到那些^M标记了吗? 它们用于替换否则不可见的回车符。 它从哪里来的? 好吧,与任何其他Internet协议一样,dict协议使用CRLF作为行终止符。 所以我们将它们作为示例文件的一部分下载。 您可以在fold和fmt文章中了解有关换行和回车的更多信息。 但就目前而言,它解释了为什么猫认为第6行不是空的。

-e:显示不可见的字符,包括行尾

-e选项的作用类似于-v选项,除了它还会在每个换行符之前添加一个美元符号($),从而明确显示行的结尾:

$ cat -e felidae.txt
$
Felidae \Felidae\ n.^M$
    a natural family of lithe-bodied round-headed fissiped^M$
    mammals, including the cats; wildcats; lions; leopards;^M$
    cheetahs; and saber-toothed tigers.^M$
^M$
    Syn: family {Felidae}.^M$
          [WordNet 1.5]^M$
$

-t:显示不可见的字符,包括选项卡

-t选项的工作方式与-v选项类似,不同之处在于它还会使用^ I条符号表示法显示制表符(制表符存储为保存值9的字节,而ASCII格式为64 + 9 = 73):

$ cat -t felidae.txt

Felidae \Felidae\ n.^M
^Ia natural family of lithe-bodied round-headed fissiped^M
^Imammals, including the cats; wildcats; lions; leopards;^M
^Icheetahs; and saber-toothed tigers.^M
^M
^ISyn: family {Felidae}.^M
^I^I  [WordNet 1.5]^M

-et:显示所有隐藏的字符

正如我已经简要提到的那样,如果要显示所有非打印字符,包括制表符和行尾标记,则需要同时使用-e和-t选项:

$ cat -et felidae.txt
$
Felidae \Felidae\ n.^M$
^Ia natural family of lithe-bodied round-headed fissiped^M$
^Imammals, including the cats; wildcats; lions; leopards;^M$
^Icheetahs; and saber-toothed tigers.^M$
^M$
^ISyn: family {Felidae}.^M$
^I^I  [WordNet 1.5]^M$
$

额外奖励:在Linux中无用的cat命令

如果没有提到“无用的Cat”反模式,那么关于cat命令的文章就不会完整。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/12442.html