作为Linux用户,一般定期都需要与文本文件进行交互,而对这些文件执行的常见操作之一是文本过滤。Linux提供了许多用于文本过滤的命令行实用程序,例如–grep、fgrep、sed、awk,这样的例子不胜枚举。
在本文中,小编将介绍另一种名为Cut的文本过滤实用程序,它用于从输入行中删除特定部分。Cut命令根据字节位置、字符、字段和分隔符执行过滤。在本指南中,将通过Linux命令行中的示例来了解Cut命令。阅读本文之后,Linux命令行用户将能够在日常运维中有效地使用Cut命令。
Cut命令语法
Cut命令的语法与任何其它Linux命令一样,其格式如下:
$ cut <OPTIONS>... [FILE-1] [FILE-2] ...
在上面的语法中,尖括号(<>)
表示强制参数,而方括号([])
表示可选参数。
现在我们已经熟悉了Cut命令的语法。接下来,让我们创建一个示例文件作为示例:
$ cat file.txt
1、输出文件的第一个字节
Cut命令允许我们使用-b
选项根据字节位置提取文本。让我们使用以下命令从文件的每一行中提取第一个字节:
$ cut -b 1 file.txt
在此示例中,可以看到Cut命令仅显示第一个字符,因为所有字符都是一个字节长。
2、输出文件的多个字节
在前面的示例中,介绍了如何从文件中选择单个字节。然而,Cut命令还允许我们使用逗号选择多个字节。让我们使用以下命令从文件中选择前四个字节:
$ cut -b 1,2,3,4 file.txt
在此示例中,我们选择了连续字节,但这不是固定式的。实际上,可以在Cut命令中使用任何有效的字节位置。
3、输出文件的字节范围
在前面的示例中,使用逗号来选择连续的字节。但是,如果我们想要连续选择大量字节,则该方法不适合。在这种情况下,可以使用连字符(-)
来指定字节范围。
为了理解这一点,让我们使用1-12作为字节范围来选择每行的前12个字节:
$ cut -b 1-12 file.txt
以类似的方式,我们也可以从中间选择一个字节范围。例如,以下命令从列号17到30中选择字节:
$ cut -b 17-30 file.txt
4、输出指定文件的起始字节位置
有时候,我们想要从某个字节位置提取所有文本。在这种情况下,可以省略结束字节位置。例如,我们可以使用以下命令打印从位置17开始的所有字节:
$ cut -b 17- file.txt
在上面的命令中,17表示起始字节位置,而连字符(-)
表示行结束。
5、输出指定文件的结束字节位置
类似地,我们也可以只指定结束字节位置。例如,以下命令打印从行首到第12列的所有字节:
$ cut -b -12 file.txt
在上面的命令中,连字符(-)
代表行的开头,而12代表结束字节位置。
6、按字符位置剪切第一个字节
接下来将介绍如何根据字节位置执行文本提取。现在,让我们看看如何按字符位置进行文本提取。为了实现这一点,可以使用-c
选项从以下多字节字符串中剪切第一个字节。
这里举个列子,具体如下:
$ echo école | cut -b 1 �
在上面的输出中,我们可以看到,Cut命令显示的是问号而不是字符é
。发生这种情况是因为我们试图输出多字节字符的第一个字节。
现在,让我们使用-c
选项来剪切相同的多字节字符并观察结果:
$ echo école | cut -c 1 é
在上面的输出中,可以看到Cut命令现在显示了预期的输出。
需要注意的是,并非所有版本的Cut命令都支持多字节字符。例如,Ubuntu及其衍生版本不支持多字节字符。为了理解这一点,让我们在源自Ubuntu的Linux Mint上运行相同的命令:
在这里可以看到,Cut命令对多字节字符和单字节字符的处理是一样的。因此它不会产生预期的输出。
7、按分隔符剪切字符串
默认情况下,Cut命令使用制表符作为分隔符。但是,我们可以使用-d
选项覆盖此默认行为。通常情况下,-d
选项与用于选择特定字段的-f
选项结合使用。
为了理解这一点,让我们使用空格字符作为分隔符并使用以下-f
选项输出前两个字段:
$ cut -d " " -f 1,2 file.txt
在上面的示例中,我们使用逗号和-f
选项来选择多个字段。
8、输出除所选字节或字符之外的所有字节或字符
有时我们想打印除少数字符之外的所有字符。在这种情况下,可以使用--complement
选项。顾名思义,此选项打印除指定列之外的所有列。
$ cut -c 1 --complement file.txt
在上面的输出中,可以看到--complement
选项输出了除第一个字符之外的所有字符。
需要注意的是,在本示例中,可以使用逗号来选择多个字段,但也可以使用其它支持的范围,具体可以参考本教程的前几个示例来了解有关范围信息。
结论
在本文当中,小编主要介绍了带有基于字节位置、字符位置和分隔符的文本过滤的Cut命令的典型示例,希望能够大家更好了解Cut命令,并且能够进行灵活的运用。如果你还知道Linux系统中Cut命令其它最佳用法示例,不妨分享出来。