第七章 文本处理工具

1 文件内容查看命令

1.1 cat命令

  1. cat 查看文件
  2. 主要选项:
  3. -n 显示行号
  4. -b 只显示非空行的内容(显示行号)
  5. -E 在每行结束处显示$
  6. -s 压缩空行
  7. -T tab键字符显示为^I
  8. 主要案例:
  9. cat -n xujun.txt
  10. cat -b xujun.txt
  11. cat -E xujun.txt
  12. cat -T xujun.txt
  13. cat >>xujun.txt<<EOF #cat的高级用法,配合重定向
  14. Xujun
  15. Woaini
  16. EOF
  17. 生产案例实践:# cat access.log error.log >web_$(date +%F).log #对多个日志文件进行合并

1.2 nl命令

  1. nl 显示行号,相当于cat -b
  2. [06:35:38 root@nginx-18 ~]# cat -b /etc/fstab
  3. 1 #
  4. 2 # /etc/fstab
  5. 3 # Created by anaconda on Thu Apr 28 21:03:43 2022
  6. 4 #
  7. 5 # Accessible filesystems, by reference, are maintained under '/dev/disk'
  8. 6 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
  9. 7 #
  10. 8 UUID=285d0c54-2e7d-4ca9-90c7-93cba1c52553 / xfs defaults 0 0
  11. 9 UUID=8abc267d-8303-452b-9856-f222473ff595 /boot xfs defaults 0 0
  12. 10 UUID=51d60775-2f21-49c0-b842-4a2934c60b3b swap swap defaults 0 0
  13. [06:35:46 root@nginx-18 ~]# nl /etc/fstab
  14. 1 #
  15. 2 # /etc/fstab
  16. 3 # Created by anaconda on Thu Apr 28 21:03:43 2022
  17. 4 #
  18. 5 # Accessible filesystems, by reference, are maintained under '/dev/disk'
  19. 6 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
  20. 7 #
  21. 8 UUID=285d0c54-2e7d-4ca9-90c7-93cba1c52553 / xfs defaults 0 0
  22. 9 UUID=8abc267d-8303-452b-9856-f222473ff595 /boot xfs defaults 0 0
  23. 10 UUID=51d60775-2f21-49c0-b842-4a2934c60b3b swap swap defaults 0 0

1.3 tac命令

  1. tac 逆向显示文本内容
  2. [07:35:06 root@nginx-18 /scripts]# cat 17.sh
  3. #!/bin/bash
  4. disk_dir=/tmp/disk
  5. day=$(date +%F)
  6. disk_space1=`df -h|awk '{print $5}'|sed 1d|cut -d "%" -f1|sed -n '1'p`
  7. disk_inode_space1=`df -i|awk '{print $5}'|sed 1d|cut -d "%" -f1|sed -n '1'p`
  8. if [ $disk_space1 -ge 85 ] || [ $disk_inode_space1 -ge 85 ];then
  9. echo "磁盘空间或者磁盘Inode数量不够了,请登录机器,检查。。。"
  10. exit 1
  11. fi
  12. [07:35:09 root@nginx-18 /scripts]# tac 17.sh
  13. fi
  14. exit 1
  15. echo "磁盘空间或者磁盘Inode数量不够了,请登录机器,检查。。。"
  16. if [ $disk_space1 -ge 85 ] || [ $disk_inode_space1 -ge 85 ];then
  17. disk_inode_space1=`df -i|awk '{print $5}'|sed 1d|cut -d "%" -f1|sed -n '1'p`
  18. disk_space1=`df -h|awk '{print $5}'|sed 1d|cut -d "%" -f1|sed -n '1'p`
  19. day=$(date +%F)
  20. disk_dir=/tmp/disk
  21. #!/bin/bash

2 分页查看文件内容

2.1 more命令

  1. more 按页查看,不能回退,灵活上不如less
  2. 主要案例:more xujun.txt

2.2 less命令

  1. less 查看当前文档内容,相比catless的使用方式更加的灵活多变,它可以实现上下翻页等功能
  2. 主要选项:-N 显示行号
  3. 主要案列:less xujun.txt

3 显示文本前或后行内容

3.1 head命令

  1. head 查看文件的前N
  2. 主要选项:-n 后面接数字,表示查看前几行(也可以不加)
  3. 注意:head默认查看10
  4. 主要案列:
  5. head -5 /etc/passwd
  6. head -10 /etc/passwd|tail -5 查看passwd文件中610

3.2 tail命令

  1. tail 查看文件的后N
  2. 主要选项:
  3. -n 后面接数字,表示查看前几行(也可以不加)
  4. -f(循环读取)监视filename文件的尾部内容(默认10行,相当于增加参数-n 10),刷新显示在屏幕上,退出按下ctrl+c
  5. -F 类似-f选项,但是不会因文件不存在而报错,是一直等待文件生成。
  6. 注意:tail默认查看10
  7. 主要案列:tail -5 /etc/passwd

4 cut命令

  1. cut 用来显示行中的指定部分,删除文件中指定字段
  2. 主要选项:
  3. -b 用字节来切割
  4. -c 用字符来切割
  5. -d 指定字段的分隔符,默认的字段分隔符为“TAB
  6. -f 显示指定字段的内容(一般配合-d使用)
  7. --output-delimiter=“ 可以把指定的分隔符替换成其他字段,比如说空格符
  8. 主要案例:
  9. ifconfig eth0|grep "inet addr:"|cut -c 21-33
  10. 192.168.203.8

5 paste命令

  1. paste:把每个文件以列对列的方式,一列列地加以合并
  2. 主要选项:
  3. -d 指定分隔符
  4. -s 已行来指定文件
  5. 主要案例:
  6. paste -d xujun.txt xujun1.txt
  7. paste -sd '=\n' svn.txt

6 分析文本的工具

6.1 wc命令

  1. wc 统计文件的字数和行数,字节数
  2. 主要选项:
  3. -l 显示总行数,常用于查看进程是否启动
  4. -L 显示最长一行的字符数
  5. -c 显示字节数
  6. -m 显示字符数
  7. -w 显示单词数
  8. 主要案例:
  9. wc -l xujun.txt
  10. 生产小案例
  11. [root@web01 ~]# ps -ef|grep "/sbin/nginx"|grep -v grep|wc -l
  12. 结果:1 #工作常用这个来查看进程是否存在,假如为1,就是存在的。要是0的话,就表示该进程不存在

6.2 sort命令

  1. sort:将文件的每一行作为一个单位,然后升序排列(默认按照accll码排序,升序,从小到大)
  2. 主要选项:
  3. -n 按照数值排序 sort -n xujun.txt
  4. -r 倒叙排列数值 sort -r xujun.txt
  5. -u 去除重复行
  6. -t 指定分隔符
  7. -k 指定区域
  8. -f 忽略字符大小写
  9. 主要案例:
  10. awk 'BEGIN{RS="[:/0-9 |\n]+"}{print $0}' passwd | sort | uniq -c | sort -rn 统计单词数
  11. head -10 /etc/passwd|tail -5|sort -t : -k 3 -n|cut -d : -f1 #以冒号分隔,取出/etc/passwd文件的第6至第10行,并将这些信息按第三个字段的数值大小进行排序,最后仅显示各自的第一个字段
  12. #生产小案例
  13. 根据ip地址来的第三列和第四列来排序:
  14. [root@db02 ~]# cat oldboy.txt |sort -t"." -k3 -k4
  15. 172.16.0.58
  16. 172.16.1.52
  17. 172.16.1.52
  18. 172.16.1.53
  19. 172.16.2.10
  20. 172.16.2.52
  21. 172.16.3.108
  22. 172.16.4.52
  23. 172.16.4.54
  24. 172.16.5.52
  25. 172.16.9.52
  26. 172.16.9.58

6.3 uniq命令

  1. uniq:用于去除或忽略文件中的重复行,一般和sort结合使用
  2. 主要选项:
  3. -c 在每列旁边显示该行重复出现的次数
  4. -d 仅显示重复的行
  5. -u 仅显示不曾重复的行
  6. 主要案例:
  7. sort file.txt | uniq -c 统计各行在文件中出现的次数
  8. awk 'BEGIN{RS="[ :/0-9\n]+"}{print $0}' xujun.txt|sort -n|uniq -c
  9. 3 adm
  10. 1 bash
  11. 5 bin
  12. 2 daemon
  13. 3 halt
  14. 2 lp
  15. 1 lpd
  16. 3 mail
  17. 6 nologin
  18. 3 root
  19. 12 sbin

7 文件之间的比较

7.1 diff命令

  1. diff:用于比较文件或目录的内容,特别是比较两个版本不同的文件以找到改动的地方
  2. 提示符:
  3. a add 增加
  4. c chage 改变
  5. d delate 删除
  6. 主要选项:-u 显示行修改的上下文,默认为上下3
  7. 主要案例:diff xujun.txt xujun1(比较两个文件内容有什么不同)
  8. [root@docker-11 ~]# diff a.txt b.txt
  9. 1,4c1,4
  10. < xujun 21
  11. < linux 23
  12. < linus 25
  13. < tom 21
  14. ---
  15. > xujun man
  16. > linux man
  17. > linus man
  18. > tom woman
  19. 其中<打头的行属于文件a.txt,以>打头的行属于文件b.txt

7.2 vimdiff

  1. vimdiff:可视化的比较工具,和diff一样,就是多了vim可视化(最多可以比较4个文件)
  2. 主要案列:vimdiff xujun.txt xujun1 xujun2 xujun3