通过学习如何使用 cut 命令操作文本,成为 Linux 高级用户。

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

UNIX 中的 cut 命令用于从每行文件中剪切部分,并将结果写入标准输出。它可以用于按字节位置、字符和字段剪切一行的部分内容。基本上,“剪切”命令会分割一行并提取文本。必须用命令指定选项,否则会出现错误。

由于平面文件数据库没有结构关系,并且记录是通过分隔符分隔的,因此 cut 是提取字符或字节信息的理想工具。本文详细讨论了 cut 命令并演示了一些具有不同过滤器选项的实际示例,以帮助您开始使用该工具。

cut 命令概述

cut 使用以下基本语法:

cut <option> <file>

你还可以使用其他命令对其进行管道传输,如下所示:

echo “string_of_characters” | cut <options>

请注意,缺少任何选项都会产生错误。以下是一些可用于 cut 调用其各种功能的一些标志:

选项 描述
-b 按字节位置剪切
-c 按字符位置剪切
-d 使用 (-f) 字段选项指定的分隔符提取字符串
-f 按指定字段提取
-s 仅用于分隔符的提取
–complement 打印除您指定的字段外的输出
–output-delimiter 用您指定的分隔符替换现有分隔符

以下是 cut 命令的一些示例,可帮助您更好地了解该工具及其功能。

1、从字符串中提取特定字符

使用-b选项按字节数获取字符串,如下所示:

linuxmi@linuxmi:~/www.linuxmi.com$ echo "Hello World www.linuxmi.com" | cut -b 17,18,19,20,21,22,23,24,25,26,27
或者
linuxmi@linuxmi:~/www.linuxmi.com$ echo "Hello World www.linuxmi.com" | cut -b 17-27

输出:

linuxmi.com

您还可以指定文件路径而不是字符串:

linuxmi@linuxmi:~/www.linuxmi.com$ cut -b 1,2,3,4,5 linuxmi.txt

或者您可以根据字符在文本中的位置提取字符。使用-c选项后跟您需要获取的字符的序列/顺序,如下所示:

linuxmi@linuxmi:~/www.linuxmi.com$ echo "Hello World www.linuxmi.com" | cut -c 17,18,19,20,21,22,23,24,25,26,27

输出:

linuxmi.com

同样,要从平面文件数据库中获取字段或列,请使用带有-f标志选项的 cut 命令:

linuxmi@linuxmi:~/www.linuxmi.com$ cut -f 3 linuxmi.com.txt

2、字节或字符的剪切范围

您还可以将-b标志与 cut 命令一起使用来提取和打印多个字节范围,如下所示:

linuxmi@linuxmi:~/www.linuxmi.com$ cut -b 2-8,15-22 linuxmi.com.txt

您可以使用-c标志定义获取字符的范围,如下所示:

linuxmi@linuxmi:~/www.linuxmi.com$ cut -c 2-8,15-22 linuxmi.com.txt

3、从开始或结束位置提取文本

使用-cn-选项从第 n 个字符开始到行尾提取文本,其中n是字符串中字符的索引。

例如,要提取从第六个字符开始到行尾的字符串:

linuxmi@linuxmi:~/www.linuxmi.com$ cut -c5- linuxmi.com.txt

或者使用以下命令从文件中获取从开始到最后m个字符:

linuxmi@linuxmi:~/www.linuxmi.com$ cut -c-15 linuxmi.com.txt

4、从文件中剪切多个字段

您还可以使用-f标志从文件中打印多个字段。

linuxmi@linuxmi:~/www.linuxmi.com$ cut -f 1,3 linuxmi.com.txt

输出:

Hello	LinuxMi.com
Ubuntu	CentOS
Java	Kotlin
Oracle	SQLite

5、使用分隔符提取文本

您可以使用-d标志通过-f选项指定分隔符。分隔符指定用于分隔文本文件中的字段的字符。

例如,要提取/etc/passwd文件的第一列,请使用冒号 (:) 作为分隔符:

linuxmi@linuxmi:~/www.linuxmi.com$ cut -d ':' -f 1 /etc/passwd

同样,给定文本流中的分隔符值是一个空格:

linuxmi@linuxmi:~/www.linuxmi.com$ echo "LinuxMi.com 8% www or 8%" | cut -d ' ' -f 1,3

输出:

LinuxMi.com www

6、更改显示的输出分隔符

–output-delimiter标志为 cut 命令输出增加了灵活性。例如,您可以使用该标志使用$’\n’(换行符)值在单独的行中显示输出,如下所示:

linuxmi@linuxmi:~/www.linuxmi.com$ grep linuxmi /etc/passwd | cut -d ':' -f 1,7 --output-delimiter=$'\n'

输出:

linuxmi
/bin/bash

此外,您还可以使用–output-delimiter标志将输入文件的分隔符替换为您在输出中选择的分隔符:

linuxmi@linuxmi:~/www.linuxmi.com$ grep root /etc/passwd | cut -d ':' -f 1,6,7 --output-delimiter=@

输出:

root@/root@/bin/bash
nm-openvpn@/var/lib/openvpn/chroot@/usr/sbin/nologin

7、仅当行包含分隔符时才剪切字段

仅当行包含分隔符时,才使用-s标志提取字段。例如,以下命令不会获取字段-f 1,除非它有空格分隔符:

linuxmi@linuxmi:~/www.linuxmi.com$ echo "HelloWorldwww.linuxmi.com" | cut -d " " -f 1 -s

相反,下面提到的命令将生成一个输出,因为字符串包含指定的分隔符:

linuxmi@linuxmi:~/www.linuxmi.com$ echo "Hello World www.linuxmi.com" | cut -d " " -f 1 -s

输出:

Hello

同样,您也可以使用任何其他字符作为分隔符:

linuxmi@linuxmi:~/www.linuxmi.com$ echo "Hello:World:www.linuxmi.com" | cut -d ":" -f 3 -s

输出:

www.linuxmi.com

8、补充命令输出

cut 实用程序还允许您打印除指定字段之外的所有字段。使用–complement选项如下获取除第五列之外的 root 用户帐户的所有详细信息:

linuxmi@linuxmi:~/www.linuxmi.com$ grep "root" /etc/passwd | cut -d ':' --complement -s -f 3

输出:

root:x:0:root:/root:/bin/bash
nm-openvpn:x:124:NetworkManager OpenVPN,,,:/var/lib/openvpn/chroot:/usr/sbin/nologin

同样,在下面的示例中,-f 1参数必须显示Hello文本,但是,由于–complement选项,它只打印其余部分。

echo "Hello World www.linuxmi.com linuxmi" | cut -d " " -f 1 --complement

输出:

World www.linuxmi.com linuxmi

9、使用 sed 实用程序进行管道切割

最好的地方是您可以将 cut 命令与其他 Linux/Unix 命令的标准输出结合使用。

sed 就是这样一种文本编辑工具,您可以使用它来删除、插入和替换文本。您可以轻松地将其输出通过管道传递给 cut 命令。

在下面的示例中,grep 命令输出通过管道传送到 sed 实用程序,该实用程序将冒号 (:) 替换为连字符 (-),然后 cut 显示字段 1、6 和 7,如下所示:

linuxmi@linuxmi:~/www.linuxmi.com$ grep linuxmi /etc/passwd | sed 's/:/-/g' | cut -d ' ' -f 1,6,7

输出:

linuxmi-x-1000-1000-linuxmi,,,-/home/linuxmi-/bin/bash

在 Linux 上使用 cut 处理文本

cut 命令是一个灵活且高效的命令行实用程序,您可以在各种文本操作用例中使用它。它利用操作从文件或标准输入数据中过滤掉文本。该实用程序还具有使用户能够限制他们想要显示的文本并添加他们自己选择的分隔符的优势。

但是,此命令也有一些限制。您不能使用正则表达式来指定分隔符或使用并发的多个剪切命令选项。本文介绍了该实用程序的基本到高级实际示例,以帮助初学者清楚地了解 Linux 上的文本操作命令。

发表评论