Linux中的Cut命令
1. 概述
Linux 提供了各种实用程序来处理文件内容和命令输出。其中一个非常有用的是 cut命令。
在本教程中,我们将了解如何使用cut命令对文件和命令输出进行切片。
2. 基础
cut 命令是一个命令行实用程序,用于从文件的每一行中剪切部分。它将结果写入标准输出。
值得注意的是,它不会修改文件,而仅适用于内容的副本。
虽然通常 cut命令的输入是文件,但我们可以通过管道输出 其他命令的输出并将其用作输入。
3. 按字节切片
首先,让我们看看如何按字节对文件中的数据进行切片。 假设我们有一个员工记录文件,employee_data.txt:
Name Age Department
John Smith 36 HR
John Wayne 48 Finance
Edward King 40 Finance
Stephen Fry 50 IT
上面的各个字段由制表符分隔。
要按字节切片,我们将使用 -b或 –bytes 选项:
$ cut -b 2 employee_data.txt
这将打印文件中每一行的第二个字节:
a
o
o
d
t
在这里,我们不限于按单个字节切片。因此,我们可以从每一行中选择多个字节。
例如,我们可以使用“ , ” 分隔符同时对第 3、第 5 和第 8 个字节进行切片:
$ cut -b 3,5,8 employee_data.txt
m e
h i
h y
wrK
eh
我们还可以使用*“ - ”*分隔符指定范围:
$ cut -b 2-5 employee_data.txt
ame
ohn
ohn
dwar
teph
值得注意的是,我们可以在指定 range 时省略起始位置或结束位置。因此,“ -5 ”将选择从第一个位置到第五个位置的所有字节。并且,“ 5- ” 将选择从第 5 位到行尾的所有字节。
如上所述,除了文件,我们还可以通过管道将其他 Linux 命令的输出作为cut命令的输入:
$ echo slicing example | cut -b 3-7
icing
4. 按字符切片
对于按字符切片,我们将使用 -c或 –characters 选项。
它类似于按字节切片,只是它使用字符位置而不是字节位置。
因此,如果一个字符使用多个字节,则输出将包括整个字符而不是字符中的一个字节。
让我们看一个例子:
$ echo spéciale | cut -c 3
é
$ echo spéciale | cut -b 3
?
$ echo spéciale | cut -b 3,4
é
请注意*?* 由上面的第二个命令打印,因为双字节字符的第一个字节不可打印。
值得注意的是,制表符和退格键被视为一个字符。
5. 按字段切片
现在,让我们看看如何按字段对文件数据进行切片。
假设我们只想列出文件中所有员工的姓名。我们可以通过使用*-f或–fields*选项按文件中的第一个字段对文件数据进行切片来做到这一点:
$ cut -f 1 employee_data.txt
在这里,我们使用 了cut命令的*-f* 选项, 并使用1作为字段编号对输入进行了切片:
Name
John Smith
John Wayne
Edward King
Stephen Fry
上面,我们假设文件中的字段使用制表符分隔。但是,我们可以通过使用*-d或–delimiter*选项来指定不同的分隔符来覆盖此行为:
$ cut -d " " -f 2 employee_data.txt
在这里,我们使用 -d选项将空格指定为分隔符。此外,我们正在使用字段编号 2对数据进行切片。
现在,让我们看看输出:
Smith 36 HR
Wayne 48 Finance
King 40 Finance
Fry 50 IT
值得注意的是,输出包括前面第一个字段的一部分和所有其余字段。这是因为制表符现在被视为任何其他字符,并且在任何其他字段中都没有空格。同样,第一行是空白的,因为它不包含任何空格。
与其他选项一样,我们可以使用*“ , ”* 分隔符选择多个字段:
$ cut -f 1,3 employee_data.txt
Name Department
John Smith HR
John Wayne Finance
Edward King Finance
Stephen Fry IT
而且,我们可以使用*“ - ”*分隔符选择一系列字段:
$ cut -f 2- employee_data.txt
Age Department
36 HR
48 Finance
40 Finance
50 IT
上述命令将从第二个字段开始输出所有字段。 默认情况下,cut命令打印输入中的所有行,即使分隔符不存在。但是,我们可以使用*-s*或 –only-delimited来改变这种行为。使用这个选项,我们可以告诉 cut命令不要打印没有分隔符的行。
6. 其他选项
现在,让我们看看可以与上述切片方法一起使用的其他选项。
当我们使用*“ , ”*来指定多个字节/字符/字段时,cut命令连接输出而不使用分隔符。但是,我们可以使用 –output-delimiter选项添加自定义分隔符:
$ echo slicing example | cut -c 2-5,9,11-13 --output-delimiter=@
这将在输出的每个部分之间添加分隔符*“ @ ”* :
lici@e@amp
另一个有趣的选项是 –complement。这将打印除指定位置的内容之外的所有内容。
让我们看一个例子:
$ echo slicing example | cut -c 5-10 --complement
slicample
正如我们所见,输出包括除了位置 5 和 10 之间的所有字符。