选择文件列的Linux cat命令示例

举报
Tiamo_T 发表于 2022/08/05 14:51:52 2022/08/05
【摘要】 Linux command cut 用于文本处理。您可以使用此命令通过选择列从文件中提取部分文本。 本文提供了一些可在日常命令行活动中使用的 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,但值是$'\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
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。