Linux和Unix系统中有许多实用的命令可用于处理和过滤文本文件。Cut是一个命令行程序,允许您从指定文件或管道数据中剪切部分行,并将结果打印到标准输出。它可用于通过分隔符,字节位置和字符来剪切行的部分。

在本教程中,我们将通过实际示例和最常见剪切选项的详细说明向您展示如何使用Linux剪切命令。

如何使用cut命令

cut命令的语法如下:

cut OPTION... [FILE]...

使用cut命令时,必须使用以下选项中的一个:

  • -f--fields=LIST) - 通过指定字段,一组字段或一系列字段进行选择。这是最常用的选项。
  • -b--bytes=LIST) - 通过指定字节,一组字节或一个字节范围来选择。
  • -c--characters=LIST) - 通过指定字符,一组字符或一系列字符来选择。
  • -d--delimiter) - 指定将使用的分隔符,而不是默认的“TAB”分隔符。
  • --complement - 补充选择。使用此选项时,cut将显示除选定内容以外的所有字节,字符或字段。
  • -s--only-delimited) - 默认情况下,cut将打印任何不包含分隔符的行。使用此选项时,cut不会打印不包含分隔符的行。
  • --output-delimiter - 默认情况下使用输入分隔符作为输出分隔符。此选项允许您指定不同的输出分隔符字符串。

cut命令可以接受零个或多个文件名称输入。如果未指定文件FILE,或者文件FILE为-,则cut将读取标准输入。

传递给-f-b-c选项的参数列表可以是整数,以逗号,一个范围的整数,或者由逗号分隔的多个整数范围分隔的多个整数。每个范围可以是以下之一:

  • N 第N个字段,字节或字符,从1开始。
  • N- 从第N个字段,字节或字符到行尾。
  • N-M 从第N个到第M个字段,字节或字符。
  • -M 从第一个字段到第M个字段,字节或字符。

如何按字段切割

cut命令主要用于显示每行文件或标准输入的选定字段。未指定时,默认分隔符为“TAB”。

在下面的示例中,我们将使用以下文件。所有字段都由制表符分隔。

test.txt

245:789	  4567    M:4540  Admin   01:10:1980
535:763	  4987    M:3476  Sales   11:04:1978

显示您将使用的第一个和第三个字段:

cut test.txt -f 1,3
245:789	M:4540
535:763	M:3476

如果要显示从第1到第4个字段:

cut test.txt -f -4
245:789	4567	M:4540	Admin
535:763	4987	M:3476	Sales

如何基于分隔符进行切割

要基于分隔符进行剪切,请使用-d选项,然后使用要使用的分隔符。

例如,要使用“:”作为分隔符显示第1和第3个字段,请键入:

cut test.txt -d ':' -f 1,3
245:4540	Admin	01
535:3476	Sales	11

您可以使用任何单个字符作为分隔符。在下面的示例中,我们使用空格字符作为分隔符并打印第二个字段:

echo "Lorem ipsum dolor sit amet" | cut -d ' ' -f 2
ipsum

如何补充选择

补充选择字段列表使用--complement选项。这将仅打印未使用-f选项选择的字段。

以下命令将打印除第1和第3之外的所有字段:

cut test.txt -f 1,3 --complement
4567	Admin	01:10:1980
4987	Sales	11:04:1978

如何指定输出分隔符

要指定输出分隔符,请使用--output-delimiter选项。例如,要将输出分隔符设置为_您将使用:

cut test.txt -f 1,3 --output-delimiter='_'
245:789_M:4540
535:763_M:3476

如何按字节和字符切割

在继续之前,让我们区分字节和字符。

一个字节是8位,可以表示256个不同的值。当ASCII标准建立时,它考虑了使用英语所需的所有字母,数字和符号。ASCII字符表有128个字符,每个字符由一个字节表示。当计算机开始在全球流行时,科技公司开始为不同语言和超过256个字符的语言引入新的字符编码,不可能进行简单的1对1映射。这导致了诸如共享文档或浏览网站之类的不同问题,并且需要能够处理世界上大多数书写系统的新Unicode标准。创建UTF-8是为了解决这些问题。在UTF-8中,并非所有字符都用1个字节表示。字符可以用1字节到4字节表示。

在以下示例中,我们使用了ü占用2个字节的字符。

使用-b--bytes)选项通过指定字节位置来剪切一行的一部分。

选择第5个字节:

echo 'drüberspringen' | cut -b 5
b

选择第5个,第9个和第13个字节:

echo 'drüberspringen' | cut -b 5,9,13
bpg

选择从1到5字节的范围:

echo 'drüberspringen' | cut -b 1-5
drüb

在撰写本文时,GNU coreutils中捆绑的cut版本没有按字符剪切的选项。使用-c选项时,cut的行为与使用-b选项时相同。

cut示例

cut命令通常通过管道与其他命令结合使用。这里有一些例子。

获取所有用户的列表

getent passwd传递命令的输出作为cut 输入,使用: 作为分隔符打印第一个字段。

getent passwd | cut -d ':' -f1

查看10个最常用的命令

在以下示例中,cut用于从history命令输出的每一行中去除前8个字节。

history | cut -c8- | sort | uniq -c | sort -rn | head

结论

到目前为止,您应该很好地理解如何使用Linux cut命令。虽然非常有用,但cut命令有一些限制。它不支持将多个字符指定为分隔符。

如果你喜欢我们的内容可以选择在下方二维码中捐赠我们,或者点击广告予以支持,感谢你的支持

如果你喜欢我们的内容可以选择在下方二维码中捐赠我们,或者点击广告予以支持,感谢你的支持