回炉重造四--常见的文本处理工具
1.文本常见处理工具
1.1 查看文本文件内容
1.1.1 cat
命令格式: cat [选项] filename
选项:
(1)-n :显示文本的行数
(2)-A :显示所有的控制符
1.1.2 分页查看文本文件内容
1、more
2、less
1.1.3 head
命令格式: head -n $number filename (注意:如果$numeber是正数,则取文件的$number行,如果$number是负数,则表示从文件开头取到文件倒数$number行)
#实例:查看1.txt文件前十行的内容
head -n 10 1.txt
1.1.4 tail
命令格式:tail -n $number filename (注意:指定获取文件后$number行;如果$number是负数,表示从第$number行开始到文件结束)
-f :跟踪显示文件新追加的内容,通常查看日志会使用这个参数
1.1.5 paste—合并多个文件内容
paste a.file b.file (通常会和输出重定向一起使用)
-d :指定分隔符 (分隔符要用双引号引起来)
-s :将文件内容合并成一行显示出来
#实例1
[root@wengsq ~]# echo 111 > 2.log
[root@wengsq ~]# paste 1.log 2.log > 3.log
[root@wengsq ~]# cat 3.log
rm: 无法删除"/data/log": 没有那个文件或目录 111
[root@wengsq ~]# paste -d; 1.log 2.log > 3.log #错误的命令,没加双引号
paste:选项需要一个参数 -- d
Try 'paste --help' for more information.
-bash: 1.log: 未找到命令
[root@wengsq ~]# paste -d";" 1.log 2.log > 3.log
[root@wengsq ~]# cat 3.log
rm: 无法删除"/data/log": 没有那个文件或目录;111#实例2:批量修改密码
[root@centos8 ~]#cat user.txt
wang
mage
[root@centos8 ~]#cat pass.txt
123456
magedu
[root@centos8 ~]#paste -d: user.txt pass.txt
wang:123456
mage:magedu
[root@centos8 ~]#paste -d: user.txt pass.txt|chpasswd#实例3
[root@wengsq ~]# seq 10|paste -s
1 2 3 4 5 6 7 8 9 10
[root@wengsq ~]# seq 10|paste -s -d+
1+2+3+4+5+6+7+8+9+10
[root@wengsq ~]# seq 10|paste -s -d+|bc
55
1.2分析文本工具
1.2.1 cut
-d 分隔符:默认是tab分隔符
-f n: 第n个字段(n1,n3,n5:不连续字段;[n1..n5]:连续的字段)
#实例
[root@wengsq ~]# ip a|tail -4|head -1|tr -s " "|cut -d " " -f3
172.17.1.3/16
1.2.2 wc–用于统计文件的行数
[root@wengsq ~]# wc -l anaconda-ks.cfg
47 anaconda-ks.cfg
1.2.3 sort–文本排序
-n:从小到大排序
-r:执行反方向整理(一般和-n连用 -nr:从大到小排序)
-u:去重#实例1:统计日志访问量
[root@centos8 data]#cut -d" " -f1 /var/log/nginx/access_log |sort -u|wc -l
201
#实例2:统计磁盘的使用率
[root@wengsq ~]# df |tail -n +2|tr -s " " %
devtmpfs%487116%0%487116%0%/dev
tmpfs%497836%0%497836%0%/dev/shm
tmpfs%497836%7820%490016%2%/run
tmpfs%497836%0%497836%0%/sys/fs/cgroup
/dev/sda2%52403200%1284772%51118428%3%/
/dev/sda1%10475520%134228%10341292%2%/boot
tmpfs%99568%0%99568%0%/run/user/0
[root@wengsq ~]# df |tail -n +2|tr -s " " %|cut -d% -f5
0
0
2
0
3
2
0
[root@wengsq ~]# df |tail -n +2|tr -s " " %|cut -d% -f5|sort -u
0
2
3
1.2.4 uniq --去重
-c:显示每行重复的次数
-u:不显示重复的行
-d: 显示重复的行
1.2.5 diff --比较文本
3.正则表达式
#字符匹配
. 匹配任意单个字符(除了\\n),可以是一个汉字或其它国家的文字
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
\\s 匹配任何空白字符,包括空格、制表符、换页符等等。
\\S 匹配任何非空白字符#匹配次数
* 匹配前面的字符任意次
.* 任意长度的任意字符
\\? 匹配前面的字符出现一次或者0次
\\+ 匹配前面的字符至少出现一次
\\{n\\} 匹配前面的字符n次
\\{m,n\\} 匹配前面的字符至少m次最多n次
\\{,n\\} 匹配前面的字符最多n次
\\{n\\,} 匹配前面的字符最少n次#位置锚定
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^$ 空行
4.grep
-i :忽略大小写
-v : 取反
-w :匹配到整个字符串
-o :只显示匹配到的字符串
-A n :匹配到后n多少行
-B n :匹配到前n多少行
-e :实现多个选项间的逻辑或的关系
-E :使用扩展正则表达式(相当于egrep)
今天用脑过度,awk和sed下篇博客再总结,正则表达式和grep的实例没啥好举例,写多了自然就会了。