Linux 中 cut 命令的 9 个实用示例
通过学习如何使用 cut 命令操作文本,成为 Linux 高级用户。
基于 Linux 的操作系统提供了许多可以在日常工作中使用的命令行文本处理实用程序。 cut 命令就是这样一种文本操作实用程序,它使用分隔符、字节、字段和列从平面文件数据库或行中获取所需的字符串。
由于平面文件数据库没有结构关系,并且记录是借助分隔符分隔的,因此 cut 是提取字符或字节信息的理想工具。本文详细讨论了 cut 命令,并演示了一些具有不同过滤器选项的实际示例,以帮助您开始使用该工具。
cut 命令概述
cut 使用以下基本语法:
cut <option> <file>
您还可以使用其他命令对其进行管道传输,如下所示:
echo “string_of_characters” | cut <options>
请注意,缺少任何选项都会产生错误。以下是一些可以与 cut 一起使用来调用其各种功能的标志:
Option | Description |
---|---|
-b | Cuts by byte position |
-c | Cuts by character position |
-d | Extracts string using the delimiter specified with (-f) field option |
-f | Extracts by a specified field |
-s | Extracts for only delimiters |
--complement | Print the output except for the field which you have specified |
--output-delimiter | Replace the existing delimiter with the one you have specified |
以下是 cut 命令的一些示例,可帮助您更好地了解该工具及其功能。
1. 从字符串中提取特定字符
使用 -b 选项按字节数获取字符串,如下所示:
echo "Hello World" | cut -b 1,2,3,5,8,9
输出 :
Heloor
您还可以指定文件路径而不是字符串:
cut -b 1,2,3,4,5 filename.txt
或者您可以根据字符在文本中的位置提取字符。使用 -c 选项,后跟您需要获取的字符的序列/顺序,如下所示:
echo "Hello World" | cut -c 1,2,3,5,6,8,10,11
输出 :
Helo old
同样,要从平面文件数据库中获取字段或列,请使用带有 -f 标志选项的 cut 命令:
cut -f 3 database.txt
2. 字节或字符的剪切范围
您还可以将 -b 标志与 cut 命令一起使用来提取和打印多个字节范围,如下所示:
cut -b 1-7,16-23 database.txt
您可以使用 -c 标志定义获取字符的范围,如下所示:
cut -c 1-7,16-23 database.txt
3. 从开始或结束位置提取文本
使用 -cn- 选项提取从第 n 个字符开始到行尾的文本,其中 n 是字符串中字符的索引。
例如,要提取从第六个字符开始到行尾的字符串:
cut -c6- database.txt
或者使用以下命令从文件中获取从开始到最后 m 个字符:
cut -c-8 database.txt
4. 从文件中剪切多个字段
您还可以使用 -f 标志打印文件中的多个字段。
cut -f 1,2 database.txt
输出 :
NAME AGE
Jhon 20
Lisa 24
Jack 18
Bruce 23
Nancy 19
5. 使用分隔符提取文本
您可以使用 -d 标志通过 -f 选项指定分隔符。分隔符指定用于分隔文本文件中的字段的字符。
例如,要提取 /etc/passwd 文件的第一列,请使用冒号 (:) 作为分隔符:
cut -d ‘:’ -f 1 /etc/passwd
同样,给定文本流中的分隔符值是单个空格:
echo "The 1% of the 1%" | cut -d ' ' -f 2,3
输出 :
1% of
6. 更改显示的输出分隔符
--output-delimiter 标志为 cut 命令输出增加了灵活性。例如,您可以使用该标志使用 $'\n'(换行符)值在单独的行中显示输出,如下所示:
grep alice /etc/passwd | cut -d ':' -f 1,5,7 --output-delimiter=$'\n'
输出 :
alice
Alice
/bin/sh
此外,您还可以使用 --output-delimiter 标志将输入文件的分隔符替换为您在输出中选择的分隔符:
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 ,除非它有空格分隔符:
echo "HelloWorld" | cut -d " " -f 1 -s
相反,由于字符串包含指定的分隔符,下面提到的命令将生成输出:
echo "Hello World" | cut -d " " -f 1 -s
输出 :
Hello
同样,您也可以使用任何其他字符作为分隔符:
echo "Hello:World" | cut -d ":" -f 2 -s
输出 :
World
8. 补充命令输出
剪切实用程序还允许您打印除指定字段之外的所有字段。使用 --complement 选项如下所示,获取根用户帐户除第五列之外的所有详细信息:
grep "root" /etc/passwd | cut -d ':' --complement -s -f 5
输出 :
root:x:0:0:/root:/bin/bash
同样,在下面的示例中,-f 1 参数必须显示 Hello 文本,但是,由于 --complement 选项,它只打印其余的。
echo "Hello to the whole World" | cut -d " " -f 1 --complement
输出 :
to the whole World
9. 使用 sed 实用程序进行管道切割
最好的部分是您可以将 cut 命令与其他 Linux/Unix 命令的标准输出结合起来。
sed 就是这样一种文本编辑工具,您可以使用它来删除、插入和替换文本。您可以轻松地将其输出传送到 cut 命令。
在下面的示例中,grep 命令输出通过管道传输到 sed 实用程序,该实用程序将冒号 (:) 替换为连字符 (-),然后 cut 显示字段 1、6 和 7,如下所示:
grep alice /etc/passwd | sed 's/:/-/g' | cut -d ' ' -f 1,5,7
输出 :
alice-x-1005-1008-Alice-/home/new/alice-/bin/sh
在 Linux 上使用 cut 处理文本
cut 命令是一个灵活且高效的命令行实用程序,您可以在文本操作的各种用例中使用它。它利用操作从文件或标准输入数据中过滤掉文本。该实用程序还有一个优点,使用户能够限制他们想要显示的文本并添加自己选择的分隔符。
但是,该命令也有一些限制。您不能使用正则表达式指定分隔符或使用并发多个剪切命令选项。本文涵盖了该实用程序的基础到高级实用示例,以帮助初学者清楚地了解 Linux 上的文本操作命令。