第七章 文本处理工具
1 文件内容查看命令
1.1 cat命令
cat 查看文件
主要选项:
-n 显示行号
-b 只显示非空行的内容(显示行号)
-E 在每行结束处显示$
-s 压缩空行
-T 把tab键字符显示为^I
主要案例:
cat -n xujun.txt
cat -b xujun.txt
cat -E xujun.txt
cat -T xujun.txt
cat >>xujun.txt<<EOF #cat的高级用法,配合重定向
Xujun
Woaini
EOF
生产案例实践:# cat access.log error.log >web_$(date +%F).log #对多个日志文件进行合并
1.2 nl命令
nl 显示行号,相当于cat -b
[06:35:38 root@nginx-18 ~]# cat -b /etc/fstab
1 #
2 # /etc/fstab
3 # Created by anaconda on Thu Apr 28 21:03:43 2022
4 #
5 # Accessible filesystems, by reference, are maintained under '/dev/disk'
6 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
7 #
8 UUID=285d0c54-2e7d-4ca9-90c7-93cba1c52553 / xfs defaults 0 0
9 UUID=8abc267d-8303-452b-9856-f222473ff595 /boot xfs defaults 0 0
10 UUID=51d60775-2f21-49c0-b842-4a2934c60b3b swap swap defaults 0 0
[06:35:46 root@nginx-18 ~]# nl /etc/fstab
1 #
2 # /etc/fstab
3 # Created by anaconda on Thu Apr 28 21:03:43 2022
4 #
5 # Accessible filesystems, by reference, are maintained under '/dev/disk'
6 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
7 #
8 UUID=285d0c54-2e7d-4ca9-90c7-93cba1c52553 / xfs defaults 0 0
9 UUID=8abc267d-8303-452b-9856-f222473ff595 /boot xfs defaults 0 0
10 UUID=51d60775-2f21-49c0-b842-4a2934c60b3b swap swap defaults 0 0
1.3 tac命令
tac 逆向显示文本内容
[07:35:06 root@nginx-18 /scripts]# cat 17.sh
#!/bin/bash
disk_dir=/tmp/disk
day=$(date +%F)
disk_space1=`df -h|awk '{print $5}'|sed 1d|cut -d "%" -f1|sed -n '1'p`
disk_inode_space1=`df -i|awk '{print $5}'|sed 1d|cut -d "%" -f1|sed -n '1'p`
if [ $disk_space1 -ge 85 ] || [ $disk_inode_space1 -ge 85 ];then
echo "磁盘空间或者磁盘Inode数量不够了,请登录机器,检查。。。"
exit 1
fi
[07:35:09 root@nginx-18 /scripts]# tac 17.sh
fi
exit 1
echo "磁盘空间或者磁盘Inode数量不够了,请登录机器,检查。。。"
if [ $disk_space1 -ge 85 ] || [ $disk_inode_space1 -ge 85 ];then
disk_inode_space1=`df -i|awk '{print $5}'|sed 1d|cut -d "%" -f1|sed -n '1'p`
disk_space1=`df -h|awk '{print $5}'|sed 1d|cut -d "%" -f1|sed -n '1'p`
day=$(date +%F)
disk_dir=/tmp/disk
#!/bin/bash
2 分页查看文件内容
2.1 more命令
more 按页查看,不能回退,灵活上不如less
主要案例:more xujun.txt
2.2 less命令
less 查看当前文档内容,相比cat,less的使用方式更加的灵活多变,它可以实现上下翻页等功能
主要选项:-N 显示行号
主要案列:less xujun.txt
3 显示文本前或后行内容
3.1 head命令
head 查看文件的前N行
主要选项:-n 后面接数字,表示查看前几行(也可以不加)
注意:head默认查看10行
主要案列:
head -5 /etc/passwd
head -10 /etc/passwd|tail -5 查看passwd文件中6到10行
3.2 tail命令
tail 查看文件的后N行
主要选项:
-n 后面接数字,表示查看前几行(也可以不加)
-f(循环读取)监视filename文件的尾部内容(默认10行,相当于增加参数-n 10),刷新显示在屏幕上,退出按下ctrl+c
-F 类似-f选项,但是不会因文件不存在而报错,是一直等待文件生成。
注意:tail默认查看10行
主要案列:tail -5 /etc/passwd
4 cut命令
cut 用来显示行中的指定部分,删除文件中指定字段
主要选项:
-b 用字节来切割
-c 用字符来切割
-d 指定字段的分隔符,默认的字段分隔符为“TAB”
-f 显示指定字段的内容(一般配合-d使用)
--output-delimiter=“ ” 可以把指定的分隔符替换成其他字段,比如说空格符
主要案例:
ifconfig eth0|grep "inet addr:"|cut -c 21-33
192.168.203.8
5 paste命令
paste:把每个文件以列对列的方式,一列列地加以合并
主要选项:
-d 指定分隔符
-s 已行来指定文件
主要案例:
paste -d :xujun.txt xujun1.txt
paste -sd '=\n' svn.txt
6 分析文本的工具
6.1 wc命令
wc 统计文件的字数和行数,字节数
主要选项:
-l 显示总行数,常用于查看进程是否启动
-L 显示最长一行的字符数
-c 显示字节数
-m 显示字符数
-w 显示单词数
主要案例:
wc -l xujun.txt
生产小案例
[root@web01 ~]# ps -ef|grep "/sbin/nginx"|grep -v grep|wc -l
结果:1 #工作常用这个来查看进程是否存在,假如为1,就是存在的。要是0的话,就表示该进程不存在
6.2 sort命令
sort:将文件的每一行作为一个单位,然后升序排列(默认按照accll码排序,升序,从小到大)
主要选项:
-n 按照数值排序 sort -n xujun.txt
-r 倒叙排列数值 sort -r xujun.txt
-u 去除重复行
-t 指定分隔符
-k 指定区域
-f 忽略字符大小写
主要案例:
awk 'BEGIN{RS="[:/0-9 |\n]+"}{print $0}' passwd | sort | uniq -c | sort -rn 统计单词数
head -10 /etc/passwd|tail -5|sort -t : -k 3 -n|cut -d : -f1 #以冒号分隔,取出/etc/passwd文件的第6至第10行,并将这些信息按第三个字段的数值大小进行排序,最后仅显示各自的第一个字段
#生产小案例
根据ip地址来的第三列和第四列来排序:
[root@db02 ~]# cat oldboy.txt |sort -t"." -k3 -k4
172.16.0.58
172.16.1.52
172.16.1.52
172.16.1.53
172.16.2.10
172.16.2.52
172.16.3.108
172.16.4.52
172.16.4.54
172.16.5.52
172.16.9.52
172.16.9.58
6.3 uniq命令
uniq:用于去除或忽略文件中的重复行,一般和sort结合使用
主要选项:
-c 在每列旁边显示该行重复出现的次数
-d 仅显示重复的行
-u 仅显示不曾重复的行
主要案例:
sort file.txt | uniq -c 统计各行在文件中出现的次数
awk 'BEGIN{RS="[ :/0-9\n]+"}{print $0}' xujun.txt|sort -n|uniq -c
3 adm
1 bash
5 bin
2 daemon
3 halt
2 lp
1 lpd
3 mail
6 nologin
3 root
12 sbin
7 文件之间的比较
7.1 diff命令
diff:用于比较文件或目录的内容,特别是比较两个版本不同的文件以找到改动的地方
提示符:
a add 增加
c chage 改变
d delate 删除
主要选项:-u 显示行修改的上下文,默认为上下3行
主要案例:diff xujun.txt xujun1(比较两个文件内容有什么不同)
[root@docker-11 ~]# diff a.txt b.txt
1,4c1,4
< xujun 21
< linux 23
< linus 25
< tom 21
---
> xujun man
> linux man
> linus man
> tom woman
其中<打头的行属于文件a.txt,以>打头的行属于文件b.txt
7.2 vimdiff
vimdiff:可视化的比较工具,和diff一样,就是多了vim可视化(最多可以比较4个文件)
主要案列:vimdiff xujun.txt xujun1 xujun2 xujun3