shell编程基础(第13篇:读取文件内容的3个命令)

前言

    一个文件总要看看它的内容是什么,这就是读取文件内容,在类Linux系统中,有很多命令可以读取文件的内容,常用的有cat、head、tail、less、more等等,每个命令有着不同的特点,多数情况下我们要依据文件的内容多少来决定使用哪个命令更合适,接下来一起来了解一下吧,比如文件只有10行文本,那么你用哪个命令都行,假设有1万行文本,就考虑用哪个命令更合适了,学完这篇文章,你会知道该用哪个命令更适合!本篇文章会介绍3个主要命令:他们是cat、head、tail。

cat

    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命令常用于查看较短文件的内容,几百行以内的文件内容。它的合并功能可以用于文本文件或者二进制文件

head

    如果有个文件内容有几千、甚至几万行,你只想看前面几行甚至几十行的内容,使用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

    一个超大文件,有几万行,可是你只想看文件末尾的内容,这时候用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,这个功能非常用

你可能感兴趣的:(Linux,shell脚本,linux,运维,服务器)