Linux 和 Unix 系统中有许多实用程序可让您处理和过滤文本文件。cut
是一个命令行实用程序,允许您从指定文件或管道数据中剪切部分行并将结果打印到标准输出。它可用于按分隔符、字节位置和字符来剪切行的各个部分。
在本文中,我们将向您展示如何使用cut
通过实际示例和最常见选项的详细解释来了解命令。
如何使用cut
命令#
语法为cut
命令如下:
告诉我们的选项cut
剪切选定部分时是否使用分隔符、字节位置或字符,各行如下:
-
-f
(--fields=LIST
) - 通过指定一个字段、一组字段或一系列字段进行选择。这是最常用的选项。
-
-b
(--bytes=LIST
) - 通过指定一个字节、一组字节或一个字节范围进行选择。
-
-c
(--characters=LIST
) - 通过指定一个字符、一组字符或一个字符范围进行选择。
您可以使用上面列出的选项之一,并且只能使用其中之一。
其他选项有:
-
-d
(--delimiter
) - 指定将使用的分隔符,而不是默认的“TAB”分隔符。
-
--complement
- 补充选择。使用此选项时cut
显示除所选内容之外的所有字节、字符或字段。
-
-s
(--only-delimited
) - 默认情况下cut
打印不包含分隔符的行。当使用该选项时,cut
不打印不包含分隔符的行。
-
--output-delimiter
- 默认行为cut
就是使用输入分隔符作为输出分隔符。此选项允许您指定不同的输出分隔符字符串。
The cut
命令可以接受零个或多个输入文件名。如果不FILE
被指定,或者当FILE
is -
, cut
将从标准输入中读取。
The LIST
参数传递给-f
, -b
, and -c
options 可以是一个整数、多个以逗号分隔的整数、一个整数范围或多个以逗号分隔的整数范围。每个范围可以是以下之一:
-
N
第 N 个字段,字节或字符,从 1 开始。
-
N-
从第 N 个字段(字节或字符)到行尾。
-
N-M
从第 N 到第 M 个字段、字节或字符。
-
-M
从第一个到第 M 个字段、字节或字符。
如何按字段切割#
要指定应剪切的字段,请使用以下命令调用命令-f
选项。不指定时,默认分隔符为“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
选项,后跟您要使用的分隔符。
例如,要使用“:”作为分隔符显示第一个和第三个字段,您可以键入:
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
option.
以下命令将打印除第一个和第三个之外的所有字段:
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
如何按字节和字符进行剪切#
在进一步讨论之前,让我们先区分一下字节和字符。
1 个字节为 8 位,可以表示 256 个不同的值。当 ASCII 标准建立时,它考虑了使用英语所需的所有字母、数字和符号。 ASCII字符表有128个字符,每个字符由一个字节表示。当计算机开始在全球范围内使用时,科技公司开始为不同语言引入新的字符编码。对于超过 256 个字符的语言,简单的一对一映射是不可能的。这会导致不同的问题,例如共享文档或浏览网站,因此需要一个可以处理世界上大多数书写系统的新 Unicode 标准。 UTF-8 就是为了解决这些问题而创建的。在UTF-8中,并非所有字符都用1个字节表示。字符可以用1字节到4字节来表示。
The -b
(--bytes
) 选项告诉命令从给定字节位置指定的每一行中剪切部分。
在以下示例中,我们使用ü
占用 2 个字节的字符。
选择第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
在撰写本文时,版本cut
捆绑在 GNU coreutils 中没有按字符剪切的选项。当使用-c
选项,cut
行为与使用时相同-b
option.
剪切示例#
The cut
命令通常通过管道与其他命令结合使用。这里有一些例子:
获取所有用户的列表#
的输出getent passwd
命令被传递到cut
,它使用打印第一个字段:
作为分隔符。
getent passwd | cut -d ':' -f1
输出显示所有系统用户的列表
.
查看 10 个最常用的命令#
在下面的示例中,cut
用于从每行中剥离前 8 个字节history命令输出。
history | cut -c8- | sort | uniq -c | sort -rn | head
结论#
cut
命令用于显示给定文件或标准输入的每一行中选定的字段。
虽然很有用,cut
有一些限制。它不支持指定多个字符作为分隔符,也不支持多个分隔符。
如果您有任何问题或反馈,请随时发表评论。