使用 head 和 tail 以块方式读取文本流

文章中介绍了 head 和 tail 命令,它们对于以块方式处理静态和动态文件中的数据非常有用。

假定您想只处理文件的一部分,譬如头几行或后几行,那您该怎么做呢?请使用 head (它将头 10 行发送至标准输出)或 tail (它将后 10 行发送至标准输出)。

您可以通过使用 -n 选项改变这些命令发送至其标准输出的行数(当然,输出结果将随 XF86Config 文件的内容而不同):

清单 1. 将 XF86Config 中选定行数的内容发送至标准输出
$ head -n 4 /etc/X11/XF86Config
# File generated by anaconda.
# **********************************************************************
# Refer to the XF86Config(4/5) man page for details about the format of
# this file.
$ tail -n 4 /etc/X11/XF86Config
Modes       "1600x1200"
ViewPort    0 0
EndSubsection
EndSection

如果您想让 headtail 以字节而不是以行为单位,那该怎么办呢?您可以用 -c 选项代替 -n 选项。因此,要显示前 200 个字符,请使用 head -c 200 file ,或者使用 tail -c 200 file 来显示后 200 个字符。如果数字后面跟有 b (表示块(block)),那么这个数字将被乘以 512。类似地,跟有 k (表示千字节(kilobyte))表示用 1024 去乘给定的数字,而跟有 m (表示兆字节(megabyte))表示用 1048576 字节去乘给定的数字。

请记住, head file1 file2 file3cat file1 file2 file3 | head 之间有重大差别。前者将打印每个文件指定行数的内容,不同文件的内容之间用头信息隔开,头信息以 ==> 后跟文件名开头。后者将打印由 cat 命令后所列文件组成的输入流中指定行数的内容,但将把输入流作为单个文件对待。可以使用 -q (表示静默(quiet))选项关闭文件名头信息。与 -q 相反的是 -v (表示详列(verbose))。

假如您要处理的文件在处理期间一直在发生变化(比如,当您让 headtail 读取来自正在被另一个命令写入的文件的数据时,就是这种情况),请使用 -f 选项让 tail 持续读取来自指定文件的数据并将这些数据发送至 tail 自己的标准输出中。通过管道发送数据时该选项会被忽略。因此, cat file | tail -f 将不会得到所期望的结果,但 tail -f file 则可以。

(如果 tail 正在读取的文件不止一个,那么各行内容之间将用标准头信息隔开,以指明它们来自哪个文件,标准头信息以 ==> 开头。)

这个选项用于监视系统日志再合适不过,譬如,在单独的终端窗口(或单独的控制台)中执行的 tail -f /var/log/access.log 将持续打印每次点击后新添加的 Apache 访问日志条目,一直到您用 Ctrl-C 停止它为止。

通过组合使用 headtail ,可以从文件的中间部分读取给定长度的一块数据!下面说明如何做到:假定您想从文件开头算起第 1000 字节处开始读取一块 789 字节的数据。可以使用 cat file | head -c 1788 | tail -c 789 来解决这一问题。

tac 命令逆序排序文件

如果您想对文件中的各行进行逆序排序,该怎么做呢?这就要用到 tac 命令。(请注意, taccat 逆序拼写而成。)该命令对所列出的文件中的各行或各段进行逆序排序。

该命令不能逆序排序各文件的顺序 — 这个任务您得自己做,以逆向顺序在 tac 命令后列出各文件即可。作为说明 tac 的工作原理的示例,请在您的主目录中对一些文件使用 ls -l | taills -l | tail | tac ,比较其结果。

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用以下命令读取 text 文件: ``` cat text.txt ``` 这将会将 text.txt 中的内容全部输出到终端。 如果想要将文件内容赋值给一个变量,可以使用下面的命令: ``` content=$(cat text.txt) ``` 这样,文件内容就会被赋值给变量 `content` 了。 你也可以使用 `sed` 命令来读取文件的一部分内容。例如,要获取 text.txt 第 3 行的内容,可以使用如下命令: ``` line=$(sed -n '3p' text.txt) ``` 这样,第 3 行的内容就会被赋值给变量 `line` 了。 ### 回答2: Shell 是一种命令语言和脚本语言,常用于在操作系统的命令行界面上执行各种任务。它可以通过一些命令来读取和处理文本文档。 在Shell 中,可以使用一些常见的命令来读取文本文档。例如,我们可以使用 `cat` 命令来将整个文本文档的内容打印到屏幕上,或者使用 `head` 或 `tail` 命令来只显示文本文档的前几行或后几行。另外,还可以使用 `grep` 命令来根据匹配模式进行搜索,并只输出匹配的行。 除了这些命令之外,还有一些其他的命令可以用于处理文本文档。例如,`wc` 命令可以统计文件的行数、单词数和字节数;`sort` 命令可以对文本文档进行排序;`sed` 命令可以用于替换和编辑文本内容。 除了直接使用这些命令之外,还可以通过 Shell 脚本来实现更加复杂的文本处理。Shell 脚本是一系列遵循特定语法规则的命令和控制结构的集合,可以用于自动化地处理文本文档。通过将一系列命令按照需要的顺序编写到脚本中,并在 Shell 中执行脚本,可以完成各种文本处理任务。 总之,Shell 可以通过一系列命令和脚本来读取和处理文本文档,提供了一种方便而高效的方式来操作和处理文本数据。 ### 回答3: Shell 是一种命令行解释器,可以用于执行各种命令和脚本。我们可以使用 Shell 读取 text 文本读取文本的方法有很多,以下是其中一种常见的方法: 1. 使用 Shell 内置命令 cat 来读取文本,语法如下: ``` cat 文件名 ``` 这将直接将文本的内容输出到终端。 例如,要读取名为 text.txt 的文本文件,我们可以使用以下命令: ``` cat text.txt ``` Shell 将会将 text.txt 文件的内容输出到终端上。 除了 cat 命令之外,还有其他一些用于读取文本的命令,比如 more、less、headtail。它们都有各自的特点和用途。例如,more 和 less 命令可以一次显示一屏的内容,并且可以通过按键翻页。head 命令可以显示文件的前几行,而 tail 命令可以显示文件的后几行。 在使用这些命令读取文本时,我们可以结合使用其他的 Shell 命令来对文本内容进行处理和分析,如 grep、awk 或 sed 等,以实现更多复杂的操作。这些命令可以帮助我们在读取文本时进行搜索、过滤、替换等操作,使得文本处理更加灵活和高效。 总之,Shell 提供了多种命令来读取文本,我们可以根据具体的需求选择合适的命令来进行操作。通过合理使用这些命令,我们可以方便地读取和处理文本文档中的内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值