掌握 Linux 中的 cut 命令:如何选择文件列的实用技巧与示例
链接:https://bbs.huaweicloud.com/blogs/368236
Linux command cut 用于文本处理。您可以使用此命令通过选择列从文件中提取部分文本。
本文提供了一些可在日常命令行活动中使用的 cut 命令的实用示例。
对于大多数示例,我们将使用以下测试文件。
$ cat test.txt
cat command for file oriented operations.
cp command for copy files or directories.
ls command to list out files and directories with its attributes.
1.选择字符列
要从文件中仅提取所需的列,请使用 -c 选项。以下示例显示文件 test.txt 每一行的第二个字符
$ cut -c2 test.txt
a
p
s
如上所示,字符 a、p、s 是 test.txt 文件每一行的第二个字符。
2.使用范围选择字符列
通过指定用 - 分隔的开始和结束位置,也可以从文件中提取字符范围。以下示例从名为 test.txt 的文件中提取每行的前 3 个字符
$ cut -c1-3 test.txt
cat
cp
ls
3.使用开始或结束位置选择字符列
可以使用 -c 选项将开始位置或结束位置传递给 cut 命令。
以下仅指定“-”之前的开始位置。此示例从 test.txt 文件中提取每行的第三个字符到结尾。
$ cut -c3- test.txt
t command for file oriented operations.
command for copy files or directories.
command to list out files and directories with its attributes.
以下仅指定“-”之后的结束位置。此示例从 test.txt 文件的每行开头提取 8 个字符。
$ cut -c-8 test.txt
cat comm
cp comma
ls comma
当您没有在“-”之前或之后指定数字时,将打印整行,如下所示。
$ cut -c- test.txt
cat command for file oriented operations.
cp command for copy files or directories.
ls command to list out files and directories with its attributes.
4. 从文件中选择特定字段
如果您想提取整个字段,而不是选择 x 个字符,您可以组合选项 -f 和 -d。选项 -f 指定要提取的字段,选项 -d 指定输入文件中使用的字段分隔符。
以下示例使用字段分隔符:(冒号)仅显示 /etc/passwd 文件中每行的第一个字段。在这种情况下,第一个字段是用户名。文件
$ cut -d':' -f1 /etc/passwd
root
daemon
bin
sys
sync
games
bala
5. 从文件中选择多个字段
您还可以从文件或标准输出中提取多个字段。下面的示例显示登录 shell 为“/bin/bash”的用户的用户名和主目录。
$ grep "/bin/bash" /etc/passwd | cut -d':' -f1,6
root:/root
bala:/home/bala
要显示字段范围,请指定开始字段和结束字段,如下所示。在此示例中,我们选择字段 1 到 4、6 和 7
$ grep "/bin/bash" /etc/passwd | cut -d':' -f1-4,6,7
root:x:0:0:/root:/bin/bash
bala:x:1000:1000:/home/bala:/bin/bash
6. 仅当一行包含分隔符时才选择字段
在我们的 /etc/passwd 示例中,如果您传递除 :(冒号)以外的其他分隔符,cut 将仅显示整行。
在以下示例中,我们将分隔符指定为 | (管道),并且 cut 命令仅显示整行,即使它没有找到任何具有 | 的行。(管道)作为分隔符。
$ grep "/bin/bash" /etc/passwd | cut -d'|' -f1
root:x:0:0:root:/root:/bin/bash
bala:x:1000:1000:bala,,,:/home/bala:/bin/bash
但是,可以使用 -s 选项仅过滤和显示包含指定分隔符的行。
以下示例不显示任何输出,因为 cut 命令没有找到任何具有 | 的行。(管道)作为 /etc/passwd 文件中的分隔符。
$ grep "/bin/bash" /etc/passwd | cut -d'|' -s -f1
7.选择除指定字段外的所有字段
为了补充选择字段列表,请使用选项 -complement。
以下示例显示 /etc/passwd 文件中除字段 7 之外的所有字段
$ grep "/bin/bash" /etc/passwd | cut -d':' --complement -s -f7
root:x:0:0:root:/root
bala:x:1000:1000:bala,,,:/home/bala
8.更改显示的输出分隔符
默认情况下,输出分隔符与我们在 cut -d 选项中指定的输入分隔符相同。
要更改输出分隔符,请使用选项 –output-delimiter,如下所示。在此示例中,输入分隔符是 :(冒号),但输出分隔符是 #(哈希)。
$ grep "/bin/bash" /etc/passwd | cut -d':' -s -f1,6,7 --output-delimiter='#'
root#/root#/bin/bash
bala#/home/bala#/bin/bash
9. 将输出分隔符更改为换行符
在此示例中,cut 命令输出的每个字段都显示在单独的行中。我们仍然使用--output-delimiter,但值是$'\n',这表明我们应该添加一个换行符作为输出分隔符。
$ grep bala /etc/passwd | cut -d':' -f1,6,7 --output-delimiter=$'\n'
bala
/home/bala
/bin/bash
10. 结合 Cut 与其他 Unix 命令输出
当你将它与其他一些 Unix 命令的 stdout 结合使用时,可以实现 cut 命令的强大功能。
一旦您掌握了我们上面解释过的 cut 命令的基本用法,您就可以明智地使用 cut 命令来解决您的许多文本操作需求。
以下示例说明如何从ps 命令输出中仅提取有用信息。我们还展示了如何在将最终输出提供给 cut 命令之前使用 grep 和 sed 过滤 ps 命令的输出。在这里,我们使用了剪切选项 -d 和 -f 我们在上面的例子中已经解释过了。
$ ps axu | grep python | sed 's/\s\+/ /g' | cut -d' ' -f2,11-
2231 /usr/bin/python /usr/lib/unity-lens-video/unity-lens-video
2311 /usr/bin/python /usr/lib/unity-scope-video-remote/unity-scope-video-remote
2414 /usr/bin/python /usr/lib/ubuntuone-client/ubuntuone-syncdaemon
2463 /usr/bin/python /usr/lib/system-service/system-service-d
3274 grep --color=auto python
秋
招已经开始啦,大家如果不做好充足准备的话,
秋
招很难找到好工作。
送大家一份就业大礼包,大家可以突击一下春招,找个好工作!