Linux cut ( cut ) 命令用于截取、分割文件中每行的字符串数据内容。

cut 命令的定义解释

在 Linux 和 FreeBSD 系统中,有许多实用程序可用于处理和过滤文本文件。cut 是一个命令行实用程序,允许您从指定文件或管道数据中切割、截取行内容的部分字符串数据,并将结果打印到标准输出。它可以按分隔符、字节位置和字符分割、截取行中的部分内容。

本文将通过实际示例和对最常见选项的详细解释,向您展示如何使用cut命令。

cut 命令语法

cut 命令的基本语法形式为:

cut OPTION... [FILE]...
  • [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 命令的默认行为是使用输入分隔符作为输出分隔符,使用此选项指定输出分隔符。

截取内容时 LIST 的取值:

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

cut 命令使用示例

在下面的示例中,将基于文件 test.txt 说明 cut 命令的用法,test.txt 文件的内容如下(其中各字段使用 tab 分开):

Sat:周六  上午  打篮球 张三  10:00--11:00
Sun:周日  下午  踢足球 李四  15:00--16:00

基于字段截取数据

1、使用 -f 选项,分割、截取文件中的第 1 和第 3 个字段:

cut test.txt -f 1,3

输出内容为:

Sat:周六  打篮球
Sun:周日  踢足球

2、使用 -f 选项,分割、截取文件中的第 1 至第 4 个字段:

cut test.txt -f -4

输出内容为:

Sat:周六  上午  打篮球 张三
Sun:周日  下午  踢足球 李四

自定义分隔符

cut 命令默认的分隔符为 tab,使用 -d 选项自定义分隔符。

使用 -d 选项定义分隔符 :,分割、截取文件中的第 1 和第 2 个字段:

cut test.txt -d ":" -f 1,2

输出内容为:

Sat:周六  上午  打篮球 张三  10
Sun:周日  下午  踢足球 李四  15

选择指定字段的补集

要选择指定字段列表的补集,需要使用 --complement 选项,将只打印那些没有使用 -f 选项选择的字段。

使用 --complement 选项,输出除第 1 和第 3 个字段以外的所有字段:

cut test.txt -f 1,3 --complement

输出内容:

上午  张三  10:00--11:00
下午  李四  15:00--16:00

指定输出分隔符

默认情况下输出分隔符使用输入分隔符,可以使用 --output-delimiter 选项指定输出分隔符。

使用 --output-delimiter 选项,将输出分隔符设置为 ;

cut test.txt -f 1,3 --output-delimiter=';'

输出内容:

Sat:周六;打篮球
Sun:周日;踢足球

基于字节和字符截取字符串数据

一个字节为 8 位,与使用的编码无关。一个字符使用的字节数与使用的编码方式有关,在 UTF-8 中,字符可以用 1 个字节到 4 个字节表示,但是目前基于字符的截取也是截取一个字节,而不是截取基于文件编码的一个字符长度。

在本例中文件使用的编码为 UTF-8,本例中包含中文,一个中文占 3 个字节,所以当截取的内容不是一个完整的汉字时,就会存在乱码。

1、使用 -b 选项,基于字节截取文件中的第 1 和第 2 个字节 :

cut test.txt -b 1,2

输出内容:

Sa
Su

2、使用 -c 选项,基于字节截取文件中的第 1 和第 2 个字节 :

cut test.txt -c 1,2

输出内容:

Sa
Su

当前:使用 -b-c 都是截取指定的字节,截取的内容相同。

截取中文解释说明

示例文件 test.txt 中的第 5-7 字节为汉字 ,第 8-10 字节为汉字第一行为 ,第二行为 ,截取不是完整汉字字节时就会乱码。

1、使用 -c 选项,基于字节截取文件中的第 8 至第 10 个字符的汉字:

cut test.txt -c 8-10

输出内容:

六
日

2、使用 -c 选项,基于字节截取文件中的第 9 至第 10 个字符(不是完整汉字,则乱码):

cut test.txt -c 9-10

输出内容:

��
��

cut 命令选项解释

如下给出了 Linux cut 命令中所有选项的解释说明:

选项 解释说明
-b, --bytes=LIST 指定一个字段、以逗号分隔的一组字段或一个范围的字节
-c, --characters=LIST 指定一个字段、以逗号分隔的一组字段或一个范围的字符
-d, --delimiter=DELIM 指定一个分隔符,替代默认的 tab 分隔符
-f, --fields=LIST 指定一个字段、以逗号分隔的一组字段或一个范围的字段,这是最常用的选项
-n 忽略此选项
--complement 当使用此选项时,cut 命令显示除选定的字节、字符或字段之外的所有字节、字符或字段
-s, --only-delimited 默认情况下,cut 命令会输出不包含分隔符的行;使用此选项时,cut 命令输出包含分隔符的行
--output-delimiter=STRING cut 命令的默认行为是使用输入分隔符作为输出分隔符,使用此选项指定输出分隔符为 STRING
-z, --zero-terminated 行分隔符是 NUL,而不是换行符
--help 显示帮助信息后退出
--version 显示版本信息后退出

结语

在本教程中我们介绍了如何使用 cut ( cut ) 命令截取、分割文件中每行的字符串数据内容,允许您从指定文件或管道数据中切割、截取行内容的部分字符串数据,并将结果打印到标准输出。它可以按分隔符、字节位置和字符分割、截取行中的部分内容。

该 cut 命令可以在 Linux 系统中使用,也可以在 FreeBSD 系统中使用。