ghost Asked: 2018-12-16 19:27:36 +0800 CST2018-12-16 19:27:36 +0800 CST 2018-12-16 19:27:36 +0800 CST cut 的 -b 和 -c 选项有什么区别? 772 我在网上搜索了示例,浏览了该cut命令的参考手册并自己进行了测试,但仍不确定该-b标志。没有任何关于该cut -b命令如何工作的明确示例。有人可以创建一个示例文件并展示它是如何清晰使用的吗? command-line coreutils 1 个回答 Voted Best Answer dessert 2018-12-17T02:42:21+08:002018-12-17T02:42:21+08:00 GNU 软件是在info页面中描述的,所以让我们看看是怎么info cut说的: '-b BYTE-LIST' '--bytes=BYTE-LIST' 选择仅打印 BYTE-LIST 中列出的位置中的字节。制表符和退格键被视为任何其他字符;它们占用 1 个字节。如果指定了输出分隔符(参见“--output-delimiter”的描述),则在所选字节范围之间输出该字符串。 '-c CHARACTER-LIST' '--characters=CHARACTER-LIST' 选择仅打印 CHARACTER-LIST 中所列位置的字符。 目前与“-b”相同,但国际化将改变这一点。 制表符和退格键被视为任何其他字符;它们占用 1 个字符。如果指定了输出分隔符(参见“--output-delimiter”的描述),则在所选字节范围之间输出该字符串。 这是来自 Ubuntu 18.04 和 18.10 附带的 coreutils 8.28,正在添加多字节支持,并且将来可能会启用这两个选项的不同行为。 xxd -g1显示按字节分组的字符(冒号之后)的 hexdump 字节等效项以及左侧的 ASCII 表示。举个例子: $ printf a | xxd -g1 00000000: 61 a $ printf á | xxd -g1 00000000: c3 a1 .. a是一个单字节字符,十六进制等效值为 61,而á是一个两字节字符,十六进制等效值为 c3 a1。让我们看看cutcoreutils 8.28 如果我们尝试分别删除第一个字节或字符(0a只是添加的换行符cut,可以忽略)的行为: $ printf ab | cut -b1 | xxd -g1 00000000: 61 0a a. $ printf ab | cut -c1 | xxd -g1 00000000: 61 0a a. $ printf áb | cut -b1 | xxd -g1 00000000: c3 0a .. # first byte of á $ printf áb | cut -b2 | xxd -g1 00000000: a1 0a .. # second byte of á $ printf áb | cut -c1 | xxd -g1 00000000: c3 0a .. # first byte of á $ printf áb | cut -c2 | xxd -g1 00000000: a1 0a .. # second byte of á 实施后,预期的行为是: $ printf ab | cut -b1 | xxd -g1 00000000: 61 0a a. $ printf ab | cut -c1 | xxd -g1 00000000: 61 0a a. $ printf áb | cut -b1 | xxd -g1 00000000: c3 0a .. # first byte of á $ printf áb | cut -b2 | xxd -g1 00000000: a1 0a .. # second byte of á $ printf áb | cut -c1 | xxd -g1 00000000: c3 a1 0a ... # both bytes of á $ printf áb | cut -c2 | xxd -g1 00000000: 62 0a b. # second char = b
GNU 软件是在
info
页面中描述的,所以让我们看看是怎么info cut
说的:这是来自 Ubuntu 18.04 和 18.10 附带的 coreutils 8.28,正在添加多字节支持,并且将来可能会启用这两个选项的不同行为。
xxd -g1
显示按字节分组的字符(冒号之后)的 hexdump 字节等效项以及左侧的 ASCII 表示。举个例子:a
是一个单字节字符,十六进制等效值为 61,而á
是一个两字节字符,十六进制等效值为 c3 a1。让我们看看cut
coreutils 8.28 如果我们尝试分别删除第一个字节或字符(0a
只是添加的换行符cut
,可以忽略)的行为:实施后,预期的行为是: