8 剪切命令示例 [剪切文件中的行部分]
作为 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作为字节范围来从每行中选择前十二个字节:
$ 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. 在 Linux 中按分隔符剪切字符串
默认情况下,cut命令使用TAB字符作为分隔符。但是,我们可以使用该-d
选项覆盖此默认行为。
通常,该选项与用于选择特定字段的选项-d
结合使用。-f
为了理解这一点,让我们使用空格字符作为分隔符,并使用该选项打印前两个字段-f
:
$ cut -d " " -f 1,2 file.txt
在上面的例子中,我们使用了逗号和-f
选择多个字段的选项。
8. 打印除选定字符之外的所有字节或字符
有时,我们想打印除少数字符之外的所有字符。在这种情况下,我们可以使用该--complement
选项。顾名思义,此选项将打印除指定列之外的所有列。
$ cut -c 1 --complement file.txt
在上面的输出中,我们可以看到该--complement
选项打印除第一个字符之外的所有字符。
值得注意的是,在此示例中,我们使用逗号来选择多个字段。但是,我们也可以使用其他支持的范围。我们可以参考本教程的前几个示例来了解有关范围的更多信息。
结论
在本初学者指南中,我们讨论了基于字节位置、字符位置和分隔符进行文本过滤的cut命令的实际示例。
您知道 Linux 中 cut 命令的其他最佳示例吗?请在下面的评论中告诉我们您的观点。