Linux-文本内容查看-cat,more,less,head,tail

207 阅读5分钟
  1. 命令摘要:
    1. cat:连接文件并打印
    2. more:分页显示文本文件的内容.
    3. less:more命令的加强版
    4. head:显示文件前若干行的内容
    5. tail:显示文件后若干行的内容

cat

cat的功能是连接多个文件并将其打印出来,使用man cat命令查询该命令的帮助文档,可以发现其文档说明为:

NAME
       cat - concatenate files and print on the standard output

SYNOPSIS
       cat [OPTION]... [FILE]...

因此该命令实现的主要操作为:

  1. 连接多个文件
  2. 在控制台打印连接后的文件内容

OPTION

长格式NAME含义
-A--show-allAll相当于 -vET 选项的整合,用于列出所有隐藏符号;
-E--show-endsend列出每行结尾的回车符$
-n--numbernumber对输出的所有行进行编号;
-b--number-nonblankblank与-n 相似但不同,此选项表示只对非空行进行编号。
-T--show-tabsTAB把 Tab 键 以^I显示出来;
-V--show-nonprinting列出特殊字符;
-s--squeeze-blank当遇到有连续 2 行以上的空白行时,就替换为 1 行的空白行。

常见用法

约定有两个文件,hello.txt和world.txt,hello.txt中只有一个单词hello,world.txt中只有一个单词world.即使用cat命令输出两个文件的内容,其结果为:

$ cat hello.txt
hello
$ cat world.txt
world

打印文件内容

使用cat [option] [File]...格式命令,可以用来打印这多个文件的内容.例如有hello.txtworld.txt两个文件,使用cat显示两个内容的示例命令为:

$ cat -n hello.txt world.txt
     1  hello
     2  world

连接,打印并保存文件

默认情况下,多个文件连接后并不会保存,也就是说,默认情况下,使用cat命令只是单纯的打印文件的内容,并不会保存多个文件连接后的结果.因此要将连接后的结果保存到一个文件,可以使用**>重定向输出**符号将连接后的内容保存到另一个文件中.

注意: 在使用重定向输出符保存连接后的文件内容时,cat -n hello.txt world.txt > hello_world.txtcat hello.txt world.txt > hello_world.txt的结果并不相同.

-n参数 -n参数
$ cat hello.txt world.txt > hello_world.txt
$ cat hello_world.txt
hello
world
$ cat -n hello.txt world.txt > hello_world.txt
$ cat hello_world.txt
     1  hello
     2  world

可以发现,使用>重定向输入符将连接后的文件写入新文件时,并不会简单的合并两个文件,而是保存打印输出的内容.

more

more命令用于以分页的方式,详细的查看文件的内容,尤其适合适合那些有大量文字的文件内容显示.

命令的基本格式为: more [options] file...

options

表 1 more 命令选项及含义

选项NAME含义
-f计算行数时,以实际的行数,而不是自动换行过后的行数。
-p不以卷动的方式显示每一页,而是先清除屏幕后再显示内容。
-cclear跟 -p 选项相似,不同的是先显示内容再清除其他旧资料。
-ssqueeze,压缩当遇到有连续两行以上的空白行时,就替换为一行的空白行。
-uunderline不显示下引号(根据环境变量 TERM 指定的终端而有所不同)。
+后接阿拉伯数字作为参数,从第 n 行开始显示文件内容
-后面接阿拉伯数字作为参数,一次显示的行数

vi基本控制命令

more命令交互式显示文本内容是基于vi的,因此可以用vi的控制命令实现交互式显示文本的内容.vi编辑器的几个命令为:

交互指令NAME功能
h 或 ?help显示 more 命令交互命令帮助。
q 或 Qquit退出 more。
vvi在当前行启动vi编辑器编辑文本的内容
:ffile显示当前文件的文件名和行号。
!<命令> 或 :!<命令>在子Shell中执行指定命令。
回车键向下移动一行。
空格键向下移动一页。
ddown向下移动半页。
bbackwards向上移动一页。
Ctrl+l刷新屏幕。
=显示当前行的行号。
'转到上一次搜索开始的地方。
Ctrf+ffollw向下滚动一页。
.重复上次输入的命令。
/ PATTEN搜索指定的字符串。

不过这些命令并不需要记,当显示之后,按h获取帮助就行,只要英语水平不是太差,是可以看懂的.

示例用法

用法示例
指定显示5行

$ more -5 paper.tex \documentclass[12pt, a4paper, oneside]{ctexart} \usepackage{amsmath, amsthm, amssymb, graphicx} \usepackage{multirow} \usepackage[T1]{fontenc} \usepackage[table,xcdraw]{xcolor}

从第3行开始显示

$ more +3 -2 paper.tex \usepackage{multirow} \usepackage[T1]{fontenc}

less

less命令与more命令十分类似,不过其功能更强大,不仅支持向后查看,也支持向前查看.该命令是基于morevi的.其NAME less - opposite of more.同时,它在启动前并不一次性读入文件内容,因此尤其适合大文件的读取.

option

less命令的选项和more命令的类似,如果要查看,使用man less查看就可.

交互式命令

同样,使用more命令打印文件内容之后,可以使用h命令获取交互式命令.其有别于more命令的基本交互项为:

约定: ^符号表示CTRL键或者command键.NUMBER表示阿拉伯数字,PATTERN表示支持正则和通配符的字符串.

命令类别命令默认参数功能Example
移动光标e ^E等 [NUMBER]1移动NUMBER行e+8:表示向前查看8行
y ^Y等 [NUMBER]1移动NUMBER行e+8:表示向后查看8行
G移动到最后一行
g移动到第一行
搜索/ PATTERN搜索指定的模式
? PATTERN搜索指定的模式

head

head命令用来显示文件们的前面一部分,其帮助文档是这么说的:head - output the first part of files.

命令的基本格式为 head [OPTION]... [FILE]...

option

短格式长格式含义
-c--bytes=[-]NUM后接阿拉伯数字number作为参数,表示打印文件前number字节
-n --lines=[-]NUM后接阿拉伯数字number作为参数,表示打印文件前number
-q--quiet, --silent只打印文件的内容,不打印文件的标题
-v--verbose打印文件的内容,且要打印文件的标题

常见用法

打印前K个字节

$ head -c 100 paper.tex
\documentclass[12pt, a4paper, oneside]{ctexart}
\usepackage{amsmath, amsthm, amssymb, graphicx}

打印前K行

$ head -n 2 paper.tex
\documentclass[12pt, a4paper, oneside]{ctexart}
\usepackage{amsmath, amsthm, amssymb, graphicx}

打印文件时也打印文件标题

$ head -v -n 2 paper.tex
==> paper.tex <==
\documentclass[12pt, a4paper, oneside]{ctexart}
\usepackage{amsmath, amsthm, amssymb, graphicx}

使用-v选项设置打印文件的名称,使用-n 2指定打印文件的前两行.

打印文件时不打印文件标题[default]

$ head -q -n 2 paper.tex
\documentclass[12pt, a4paper, oneside]{ctexart}
\usepackage{amsmath, amsthm, amssymb, graphicx}

相比于上面,这个选项不会打印文件的名称,这也是默认的设置,默认不打印文件名称.

tail

head命令相反,查看文档末尾的内容,参数和选项与head类似.其不同之处在于其可以使用-f选项显示文件变化后新增的内容.