文本常见处理工具

​ 文本常见的处理工具,主要的作用是在Linux系统中自动化的将文件指令的输出(回显)进行切割,筛选。留下我们最想要的部分,便于查看,或监控服务器状态。

​ 这些工具就是我们之后便捷、自动化处理Linux任务的前提条件

1.1 文件内容查看命令

1.1.1 查看文本文件内容

1.1.1.1 cat

​ 命令cat用于查看文本内容

1
2
3
4
5
6
7
cat [选项] <文件名>
#参数
-E #显示文本每行的结束符$
-A #显示文本中所有的特殊字符(tab键^I,windows换行^M,结束符$)
-n #对显示出的每一行进行编号(行号)
-b #只非空行编号(行号)
-s #压缩连续的空行为一行(去重)

1.1.1.2 nl

​ 命令nl的作用相当于cat -b,对文本非空行编号显示

1.1.1.3 tac

​ 命令tac的作用也是查看文本内容,但查看的方向与cat相反。是从文本尾部开始读取文件

反向查看(倒序)文件内容

1.1.1.4 rev

​ 命令rev的作用是将文本每行的内容进行反转(reverse 反转)

1.1.2 查看非文本文件内容

1.1.2.1 hexdump

​ 命令hexdump是Linux下的一个二进制文件查看工具,它可以将二进制文件转换成ASCII、八进制、十进制、十六进制格式进行查看

1
2
3
4
5
hexdump [选项] <文件名>
#选项
-n #length 只格式化输出文件的前length个字节
-c #输出规范的十六进制和ASCII码
-b #单字节八进制显示

1.1.2.2 od

​ 命令od的作用是读取所给予的文件的内容,并将内容与八进制字码呈现出来

1
2
3
4
5
6
7
8
9
10
11
12
od [选项] <文件名>
#选项
-t a #字符
-t c #可打印/转义字符
-t o[N] #八进制,N默认为4
-t d[N] #十进制
-t u[N] #无符号十进制
-t x[N] #十六进制
-t f[N] #浮点数

#N是一个数字,代表"字节数".不指定N时大多数格式会使用默认字节数(通常是4)
#具体细节还是另外查询。此命令使用次数还是太低了,了解即可

1.1.2.3 xxd

​ xxd的作用就是将一个文件以十六进制的形式显示出来。还可以将十六进制转换回其原始二进制形式

1
2
3
4
#例如:
echo {a..z} | tr -d ' '|xxd
0000000: 6162 6364 6566 6768 696a 6b6c 6d6e 6f70 abcdefghijklmnop
0000010: 7172 7374 7576 7778 797a 0a qrstuvwxyz.

1.2 分页查看文件内容

1.2.1 more命令

​ 命令more针对于文本内容过多时用于查阅使用。代替cat。好处时只会显示一部分,多余部分会随着翻阅慢慢展示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
more -n						#按空格后每次只读取文件n行内容
more +n #从第n行开始读取内容
more -c #清除屏幕的内容后再显示文件的内容
more -n -c #每次读取n行内容前清空屏幕
more -s #把内容中连续的空行代换为一行空行(去重)

#读取内容时的操作
空格键 #显示下一屏内容
回车键 #向下n行,需要定义 -n. 默认是1行
h键 #显示帮助屏
b键 #显示上一屏内容
q键 #退出more命令
= #输出当前的行号
:f #输出文件名和当前的行号
V #调用vi编辑器
! #调用shell,并执行命令

1.2.2 less命令

命令less和命令more功能都是分屏读取内容,less功能比more更强大一些,支持一些vim的操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
less <文件名>				#显示一屏
less -N <文件名> #显示行号

读取内容操作:
b #向后翻一页
d #向后翻半页
h #显示帮助界面
Q #退出less命令
u #向前滚动半页
y #向前滚动一页
/ #搜索信息

空格键 #滚动一页
回车键 #滚动一行

1.3 显示文本前或后行内容

1.3.1 head命令

​ 用于截出文件顶上的内容查看

1
2
3
4
5
6
# head 命令 —— 显示文件的头部内容
head <文件名> #默认显示文件的前10行内容
head -n x #显示前x行的内容
head -x #显示前x行的内容
head -v #显示文件名的头信息
head -c x #指定显示前x字节

例子:

1
2
cat /dev/urandom | tr -dc '[:alnum:]' | head -c x
#生成x位的随机密码口令

1.3.2 tail命令

1
2
3
4
5
tail -c x					#指定获取后x字节
tail -n x #指定获取后x行
tail -x #指定获取后x行
tail -f #跟踪显示文件fd新追加的内容,常用于日志监控(当文件删除再新建同名文件后无法继续跟踪)--追踪inode号
tail -F #跟踪文件名,当文件删除后再新建同名文件,可以继续跟踪文件(当文件删除再新建同名文件后可以继续跟踪)--追踪文件名,通过文件名查询到inode号后再访问内容

1.3.3 head 和 tail 的相对取值用法

命令 含义 示例
head -n k file 取 file 前 k 行内容 head -n 3 /etc/passwd
head -k file 取 file 前 k 行内容 head -3 /etc/passwd
head -n +k file 取 file 前 k 行内容 head -n +3 /etc/passwd
head -n -k file 取file 第1行到倒数第 k 行内容 head -n -3 /etc/passwd
tail -n k file 从后往前数,取 file 最后一行到第n行内容 tail -n 3 /etc/passwd
tail -k file 从后往前数,取 file 最后一行到第n行内容 tail -3 /etc/passwd
tail -n -k file 从后往前数,取 file 最后一行到第n行内容 tail -n -3 /etc/passwd
tail -n +k file 从后往前数,取 file 第k行到最后一行内容 tail -n +3 /etc/passwd

image-20241102123147195

1.4 按列抽取文本 cut

​ 命令cut的作用是提取文本文件或STDIN数据的指定列

1
2
3
4
5
6
7
cut -d'<分隔符>'				#指明分隔符,默认tab
cut -f<整数> #取第几列(字段)(可以同时存在连续和不连续.例:1-5,7)
cut -c #按字符切割
cut --output-delimiter=STRING #指定输出时使用的分隔符

#例:
cut -d: -f1,3-4,7 /etc/passwd

1.5 合并多个文件 paste

​ 命令paste的作用是将多个文件的同一行内容合并为一行

1
2
paste -d			#指定合并分隔符,默认使用tab
paste -s #横向合并(paste默认使用纵向合并)

1.6 文本分析工具

1.6.1 文本数据统计 wc

​ 命令wc可用于统计文件的行数、单词数、字节数和字符总数。可以对文件或STDIN中的数据统计

1
2
3
4
5
6
7
wc [选项] <文件>
#选项
-l #计算行数
-w #计算单词总数
-c #计算字节总数
-m #计算字符总数
-L #显示文件中最长一行的长度

1.6.2 文本排序 sort

​ 命令sort用于将文本整理后输出到屏幕上,不改变原始文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
sort [选项] <文件>
#该命令默认以升序排序(从小到大)
#选项
-u #去重
-f #忽略大小写
-n #以数字大小排序
-r #倒序(即以降序排列)

-t #指定列分割符
-k #指定用于排序的列

-b #忽略文件中的空白

-h #识别单位(例如内存单位)后排序
-z #以 NUL 字符而非换行符作为行尾分隔符

-M #以月份排序
-R #随机排序

#当使用sort进行去重和排序时,需要先去重再排序。因为sort的去重会重新排序内容(但会遍历寻找所有重复项)

1.6.3 去重 uniq

​ 命令uniq的作用是从输入中删除前后相接的重复行,常和sort配合使用。若重复行不相接,则无法去重

1
2
3
4
5
6
7
uniq [选项] <参数>
#选项
-c #显示每行出现的次数
-d #只显示有重复的行
-D #显示所有重复行具体的内容
-u #仅显示不重复的行
-z #以 NUL 字符而非换行符作为行尾分隔符

1.6.4 比较文件

1.6.4.1 diff

​ 命令diff用于比较两个文件之间的区别

1
2
3
diff [选项] <文件1> <文件2>
#选项
-u #输出"统一的(unified)"diff格式文件,最适用于补丁文件

1.6.4.2 patch

​ 命令patch用于根据补丁文件**(diff -u)**中记录的差异信息,将更改应用到原始文件上,从而将原始文件更新为新的版本。使用时需要谨慎,因为这会直接修改目标文件。

1
2
3
4
5
patch [选项]  <原始文件> <补丁文件>
#选项
-b #创建备份文件。在修改原始文件前会先beifen
-i #接文件名,从文件中读取补丁
-o #将根据补丁修改后的内容指定到另一个文件中,不会更改原文件

1.6.4.3 vimdiff

​ 命令vimdiff的作用相当于vim -d。打开多个文件并对比文件之间的不同

1.6.4.4 cmp

​ 命令cmp用于查看二进制文件的不同。只会输出不同的具体位置,不会输出内容

1.6.5 文本内容转换 tr

​ 命令tr的英文是”transform”,即转换的意思。该命令的作用是将字符进行替换、压缩、删除。它可以将一组字符转换成另一组字符。tr只能从标准输入中读取数据。要么将文件重定向到标准输入,要么通过管道符输入数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
tr [选项] <字符1> <字符2>
#字符1:被替换的字符
#字符2:将1中的字符替换后的字符

#参数
-s #删除所有重复的指定字符,只保留一个。如果指定了字符2,则去重后替换为字符2
-d #删除字符1中出现的所有字符
-c #除了字符1中出现的所有字符都替换为字符2
-t #不管字符1和字符2中的字符有多少,都一一对应替换(只认字符对应)

#匹配字符集

[:alnum:] #大小写字母和数字
[:alpha:] #大小写字母,即a-z,A-Z
[:digit:] #数字,即0-9
[:upper:] #大写字母,即A-Z
[:lower:] #小写字母,即a-z
[:space:] #空白字符
[:punct:] #标点符号
[:print:] #可见符号
[:xdigit:] #十六进制