一个文件总要看看它的内容是什么,这就是读取文件内容,在类Linux系统中,有很多命令可以读取文件的内容,常用的有cat、head、tail、less、more等等,每个命令有着不同的特点,多数情况下我们要依据文件的内容多少来决定使用哪个命令更合适,接下来一起来了解一下吧,比如文件只有10行文本,那么你用哪个命令都行,假设有1万行文本,就考虑用哪个命令更合适了,学完这篇文章,你会知道该用哪个命令更适合!本篇文章会介绍3个主要命令:他们是cat、head、tail。
cat命令,因为与猫的单词同名,所以这个命令非常好记忆。也是日常使用中读取文件内容的首选命令,不过这个命令与猫没有任何关系,先让我们看看GPT对它的介绍(我精简了一部分内容,留下了精华)
cat命令将一个或多个文件的内容输出到终端(标准输出)或者将多个文件合并成一个文件(利用重定向)
cat是concatenate(连接)的缩写,不是猫的缩写哈!!
基本语法: ``` cat [选项] [文件名] ```
选项可以是以下之一:
- `-n`:输出的每一行前面加上行号
- `-b`:输出的每一行前面加上行号,但是空白行不加行号
- `-s`:将连续的空白行压缩成一行,这个功能满赞的……
- `-E`:在每一行的末尾添加一个 `$` 符号
这些选项参数,平时可以省略……
文件名参数可以是一个或多个文件名,多个文件名之间用空格分隔
不指定文件名,则 `cat` 命令会从标准输入(键盘)读取数据。
常见的4个使用场景,按照使用率:
- 一个文件的内容输出到终端:`cat filename`
- 多个文件的内容合并到一个文件中:`cat file1 file2 > output_file`
- 将一个文件的内容追加到另一个文件的末尾:`cat file1 >> file2`
- 从标准输入读取数据并输出到终端:`cat`
上文所知,cat命令常用的场景就是4个,当然第1个场景最常用,我就不多说了,主要说一个合并文件内容的技巧:假设相似的文本文件特别多,可以巧妙利用文件名替换功能,就是*,bash解释器看见*之后,会先进行文件名解析,多个文件名会自动使用空格字符隔开
某个目录下有这些文件,我们想把他们的内容合并到一起(注意:二进制文件也可以):
movie.mpeg.001
movie.mpeg.002
...
movie.mpeg.099
命令包括*,文件名扩展功能:
cat movie.mpeg.0*>movie.mpeg
等同于
cat movie.mpeg.001 movie.mpeg.002 movie.mpeg.003 > movide.mpeg
小总结:cat命令常用于查看较短文件的内容,几百行以内的文件内容。它的合并功能可以用于文本文件或者二进制文件
如果有个文件内容有几千、甚至几万行,你只想看前面几行甚至几十行的内容,使用cat的话你就要被刷屏了,使用head就能看见前面的几行内容,老规矩,看看GPT的解释(我稍微精简了一点,留下的还是精华)
head命令默认显示文件前10行内容、或者标准输入的前几行内容(根据你传入的参数)
-n选项可指定显示的行数
显示文件file.txt的前5行
head -n 5 file.txt
显示文件file.txt的前10行
head -n 10 file.txt
例子:管道符一起使用,ls命令的前3行输出
``` ls -l | head -n 3 ```
其他选项
-q选项禁止显示文件名
-v选项显示文件名
-c选项显示指定字节数的开头部分等等
使用man head命令来查看head命令的完整文档
综上所述,head命令可以用来显示文件前几行内容,-n参数可以指定要显示几行,比如
默认显示前10行
head xxx.txt
指定显示5行
head -n 5 xxx.txt
指定显示100行
head -n 100 xxx.txt
读取文件内容的命令,除了支持文件、一般都会支持标准输入,这时候我们利用管道符,就可以将前1个命令的标准输出,作为后一个命令的标准输入,比如,只提取ls命令的标准输出的前3行
ls -l | head -n 3
小总结:介绍head命令的时候,提到了管道,即|,我会专门写一篇管道的介绍,以及管道的常用方式!
一个超大文件,有几万行,可是你只想看文件末尾的内容,这时候用tail命令即可,gpt的解答非常到位(有删改)
tail [选项] [文件名]
常用选项:
- `-n`:显示行数。例如,`tail -n 20 file.txt`会显示文件file.txt的最后20行内容。
- `-c`:显示字节数。例如,`tail -c 100 file.txt`会显示文件file.txt的最后100个字节。
- `-f`:实时跟踪文件变化,并显示新增内容。例如,`tail -f file.txt`会实时显示文件file.txt的新增内容。(这个比较好)
- `-q`:当处理多个文件时,不显示文件名。
- `-v`:当处理多个文件时,显示文件名。
不指定文件名,则tail命令会从标准输入读取数据,并显示最后10行内容。
tail命令用来查看日志文件实时内容的功能特别有用:tail -f file.txt,它可以实时显示文件的新增内容,日志文件常常都会被程序一直写入,所以实时更新非常有勇
less、more、vi、nano、等等,读取文件内容的命令有很多,前文提到的cat、head、tail,能满足你绝大多数的场景了
我们需要根据文件内容的长度选择适合的命令:
内容很短:cat就够了
内容很长:head可以读取前几行、tail可以读取后几行,非要读全文的话,也可以使用less、more命令,不过这篇没有提及、甚至使用vi、nano这样的文本编辑器程序,也能看见文件的全部内容
需要实时更新文件内容:tail -f xxx.txt,这个功能非常用