回炉重造四--常见的文本处理工具

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的实例没啥好举例,写多了自然就会了。

你可能感兴趣的:(linux)