剪切
100%

文本操作 · 第 6 课

剪切

学习使用 cut 从每行中选择字符位置或带分隔符的字段。

cut 命令从每个输入行中选择指定的字符位置或字段。它最适合处理分隔符和字段位置已知且结构一致的文本。

为示例创建一个以制表符分隔的小文件。printf 会把 \t 解释为字面制表符,把 \n 解释为换行符:

$ printf 'name\trole\nalice\tadmin\nbob\tviewer\n' > team.tsv

选择字符位置

使用 -c LIST 从每行选择位置。位置从 1 开始:

$ cut -c 1 team.tsv
n
a
b

列表可以包含单个位置和范围:

$ cut -c 1-4 team.tsv
name
alic
bob
$ cut -c 1,3 team.tsv
nm
ai
bb

空格、制表符和标点符号同样会占用位置。cut 会独立处理每一行。

哪个命令会打印 names.txt 每一行的第一个字符?

选择制表符分隔的字段

使用 -f LIST 选择字段。默认分隔符是制表符:

$ cut -f 2 team.tsv
role
admin
viewer

与字符选择一样,列表可以使用 11,32-4-32- 等值。

哪个命令会打印 team.tsv 每一行中以制表符分隔的第二个字段?

选择自定义分隔符

字段使用制表符之外的分隔符时,请把 -d CHARACTER-f 结合使用。下面创建以分号分隔的数据:

$ printf 'alice;admin\nbob;viewer\n' > team.txt
$ cut -d ';' -f 1 team.txt
alice
bob

这种形式的分隔符是一个字符。需要给 ; 加引号,因为未加引号的分号在 shell 中具有控制含义。

哪个命令会打印 team.txt 中以分号分隔的第二个字段?

处理不含分隔符的行

在字段模式下,如果某行不含分隔符,cut 通常会原样打印该行。添加 -s 可以抑制这些行:

$ printf 'alice;admin\nheader\nbob;viewer\n' | cut -s -d ';' -f 2
admin
viewer

这并不能验证通用 CSV 文件。CSV 可能包含加引号的分隔符、嵌入换行符和转义规则,单字符切分无法理解这些结构;此类数据应使用支持 CSV 的工具。

cut -d ':' -f 1 中,-s 有什么作用?

从 stdin 读取

未指定文件或使用 - 作为输入操作数时,cut 会读取 stdin,因此很适合作为管道的一环:

$ printf 'red:1\nblue:2\n' | cut -d ':' -f 1
red
blue

generate-data | cut -d ':' -f 1 中,cut 从哪里读取输入?

要练习位置和字段选择,可以尝试以下动手实验:

  1. Linux cut 命令:文本切割 - 直接练习使用 cut 从文本文件中提取指定列或字段。
  2. 序列控制和管道 - 学习控制命令执行序列、使用管道,并结合 cutgrepwcsortuniq 等文本工具。

课程已完成

你已完成 剪切

现在,你可以使用 cut 从面向行的文本中选择可预测的位置。

  • 选择单个字符位置或范围。

  • 使用 -f 提取制表符分隔字段。

  • 使用 -d 提供单字符分隔符。

  • 在适当时抑制不含分隔符的行。

  • 从文件或 stdin 读取结构化文本。

保存学习进度

创建免费账户即可保存本课进度,并在任意设备上继续学习。

创建免费账户
下一节
返回 文本操作