Linux中cut命令的实用示例

描述

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

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分