Linux 剪切命令Linux 剪切命令Linux 剪切命令Linux 剪切命令
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

Linux 剪切命令

考虑以下员工表,该表是在具有固定宽度字体的文本编辑器(例如 Courier)中生成的:

Name Date of Birth Time of Birth Specialty Date Employed Time Employed
John 11-05-91  10:11:12 Engineer 12-06-14 13:14:15
Paul 03-16-86 16:17:18 Accountant 06-19-15 19:20:21
Peter 07-20-81 Carpenter 08-21-16
Mary 22:23:24 Architect 01:02:03
Susan 04-17-87 17:22:36 Secretary 21-49-55 08:43:32

假设此数据位于 Linux 用户目录中名为 employee.txt 的文件中。有六列文本,有六个标题,分别是姓名、出生日期、出生时间等。有六行,由 1 个标题行和 5 个数据行组成。所以,这是一个由列和行(行)组成的表格。每个表格单元格的内容称为字段。字段也是一个子字符串。由于使用了固定宽度的字体,因此存在字符列。每列文本都有字符列。因此,存在字符列和字段列。

要键入表格,请从标题行开始。输入第一个字段并按键盘上的 Tab 键。输入下一个字段并按 Tab 键。以这种方式继续,直到最后一个标头字段之后。按 Enter 键。当按下 Tab 键时,字符“\t”将被插入到文件代码中,用户看不到。然而,它被用户视为一个空格(可能很长)。当在行尾按下 Enter 键时,字符“\n”将被插入到文件代码中,用户看不到。 Tab 键算作一个字符。

每条数据行都以相同的方式键入。但是,如果字段为空,则必须通过按空格键来填充该字段,直到按 Tab 键转到下一个文本列;以便下一个字段的开头与其文本列的开头对齐。

对于 Ubuntu 文本编辑器,Tab 键跨越八个字符。因此,当按下 Tab 键时,它添加的字符数是这样的:如果该字段已满字符,则字符数将是 8 的倍数。不要忘记,在一行的末尾,必须按下 Enter 键,此操作会将一个字符插入到代码中,而用户看不到。当按下 Tab 键时,单个字符将被插入到代码中,而用户看不到。因此,Tab 键算作一个字符。

这些行由换行符分隔。字段由制表符分隔。字段不一定是如上所述的经典字段。分隔符不一定是制表符。在上表中,‘:’可以被认为是分隔符,而不是制表符。在这种情况下,每行中的子串将被重新分区。例如,在“出生时间”选项卡字段中,“:”将分隔两个字符列(在两端)。对于同一个表,第一行和 Peter 的行不会有任何分隔符。这样一条线的整体就成为它的场。

字符列的分隔可以跨越制表符字段。例如,“出生时间”选项卡字段中的最后一个“:”和“工作时间”选项卡字段中的第一个“:”用于分隔字符列、交叉选项卡字段和制表符。其他分隔字符(例如逗号)也可以在其他文件中找到。

文章内容

  • 剪切语法

  • 剪切字段列

  • 删除字节列

  • 剪切字符列

  • 分隔符

  • -s 选项

  • –补足选项

  • 结论

剪切语法

cut 命令根据某些选项及其值按字符或按字段复制列。它也可以复制行,但是复制行的条件是有限的。它可以复制出一组列和行;所涉及的行的条件仍然是有限的。行就是行。语法是:

   cut OPTION... [FILE]…

可以有多个文件。不过,本教程仅使用用户目录下的一个名为employee.txt的文件,并包含上述内容。如果没有文件参数,则 cut 从标准输入读取。 cut 是一个 Linux shell 命令,具有不同的可能选项。有些选项需要值。

列计数从 1 开始,而不是从零开始。因此,第一个字符列(左)是第 1 列;第二个字符列是第 2 列;第三个字符列是第 3 列,依此类推。第一个字段列(左)是字段列 1;第二个字段列是字段列 2;第三个字段列是字段列 3,依此类推。

因此,正如已经指出的那样,cut 命令从文件中的行中复制出部分。它通常将结果打印到标准输出。

剪切字段

剪切字段意味着复制字段。原始文件保持不变。 -f 选项用于此目的,其中 f 代表字段。 -f 使用制表符作为分隔符。所以,在

  $ cut -f 1,3 employee.txt

-f 表示命令复制字段而不是字符或字节。 -f 的值为 1 和 3,以逗号分隔且不包含空格。这意味着发送到标准输出,字段列 1 和 3。结果是:

Paul

16:17:18

Peter

Mary

22:23:24

Susan

17:22:36

如果需要字段列 1、3、5,则 -f 的值将是用逗号分隔的 1,3,5 数字,并且没有空格。这就是选择字段列的方式。在本例中,制表符是分隔符。

字段列范围

以下命令从字段列 2 到字段列 5(含)选择字段列:

$ cut -f 2-5 employee.txt

输出是:

Date Of Birth  Time of Birth Specialty Date Employed
11-05-91 10:11:12 Engineer 12-06-14
03-16-86 16:17:18 Accountant 06-19-15
07-20-81 Carpenter 08-21-16
22:23:24 Architect
04-17-87 17:22:36 Secretary 21-49-55

请注意 2 和 5 之间的连字符来指示范围。

从字段编号(N 及以上)复制

以下命令从第五个字段列及以上进行复制:

$ cut -f 5- employee.txt

请注意 5 后面的连字符,中间没有空格。结果是:

06-19-15

19:20:21

08-21-16

01:02:03

21-49-55

08:43:32

复制下面的字段编号,N

以下命令复制第二个字段列和以下字段:

$ cut -f -2 employee.txt

请注意 2 之前的连字符,中间没有空格。结果是:

Paul

86年3月16日

Peter

81年7月20日

Mary

Susan

87年4月17日

删除字节列

字节列的复制方式与字段列类似。如果 ASCII 码有效,则一个字节就是一个字符。在这种情况下,制表符(\t)是一个字符,如果复制出来,它将具有将光标带到第九个字符应该所在的位置的效果。字节的选项是 -b。以下命令针对第二、第三和第四字节(字符)列说明了这一点:

$ cut -b 2,3,4 employee.txt

输出是:

ame

ohn

aul

ete

ary

usa

选项卡的效果

以下命令显示从第一个到第十个字节列:

$ cut -b 1-10 employee.txt

输出是:

Paul

03-

Peter

Mary

07-2

Susan

04-1

每行的字节(字符)数不相同,因为 (a) Paul 字段中的 Paul 后面有两个空格字符; (b) 制表符被视为一个字符(并且有其作用)。

剪切字符列

字符列的处理方式与字节列的处理方式相同。事实上,在处理多字节字符编码时,使用字符,而不是字节。字符选项是-c。以下两个命令重现前两个输出(按顺序):

$ cut -c 2,3,4 employee.txt

$ cut -c 1-10 employee.txt

分隔符

可以使用‘:’、‘-’、‘,’、‘’等分隔符来代替制表符来分隔子字符串。这样的分隔符重新划分形成该行的子字符串。换句话说,字段不再由制表符分隔,而是由新的分隔符分隔。本例中的命令与带有 -f 选项的字段命令类似,但包含用于分隔符的 -d 选项。以下命令根据“-”分隔符复制前两个字段。

$ cut -d '-' -f 1,2 employee.txt

输出是:

Name Date of Birth  Time of Birth Specialty Date Employed Time Employed
John 11-05
Paul 03-16
Peter 07-20
Mary 22:23:24  Architect 01:02:03
Susan 04-17

这个结果在逻辑上是正确的。第一行已全部显示,因为它没有“-”。第五行已全部显示,因为它没有“-”。制表符现在只是一个字符,尽管它仍然有其作用。例如,Paul 的行“Paul 03”现在是一个字段,“16”是第二个字段。使用“-”分隔符,新字段的垂直对齐效果很差。返回了两个字段,用“-”分隔。 ‘-’已重新显示。

没有分隔符的第一行和第五行可以使用 -s 选项删除。请记住,本主题中的行是行。

-s 选项

上面的结果不应该有第一行和第五行。 -s 选项消除没有分隔符的行。使用 -s 选项,上面的命令变为:

$ cut -s -d '-' -f 1,2 employee.txt

得到了一个比较满意的结果,即:

John 11-05
Paul 03-16
Peter 07-20
Susan 04-17

现在可以清楚地看到两个新的重新分区的字段列。

–补足选项

这会复制出所选字节、字符或字段的列的补码。以下命令复制最后两个字段(按制表符分隔符),而不是前四个:

$ cut --complement -f -4 employee.txt
06-19-15

19:20:21

08-21-16

01:02:03

21-49-55

08:43:32

结论

cut 命令从文件的文本行中复制出字节列、字符列或子字符串列。默认情况下,它将行的选定部分发送到标准输出。分隔的子字符串是一个字段。默认情况下,子字符串的分隔符是制表符。然而,这种情况是可以改变的。可以使用“-”、“:”、“ ”等分隔符。完成后,该行将被重新划分为不同的子字符串。 -s 选项可用于从输出中消除没有分隔符的行。

©2015-2025 艾丽卡 support@alaica.com