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,但值是$' ',这表明我们应该添加一个换行符作为输出分隔符。
$ grep bala /etc/passwd | cut -d':' -f1,6,7 --output-delimiter=$' ' 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
链接:https://bbs.huaweicloud.com/blogs/368236
全部0条评论
快来发表一下你的评论吧 !