https://www.cnblogs.com/myyan/p/4765683.html
************************************正则表达式*********************************
1.单字符的正则表达式
1)特定字符:
2)范围字符:单个字符[]
数字字符:[0-9],[259]
小写字符:[a-z]
大写字符:[A-Z]
符号字符:[,:]
范围内字符:反向字符^:[^0-9]
3)任意字符:一个“.”代表任意字符
注意: [.]和\.代表本身含义
2.正则表达式的其他字符
1)边界字符:头尾字符
头字符^:^root 注意与[^]区别
尾字符:$:false$
空行:^$
2)元字符:
\w:匹配任何字类字符包括下划线[A-Za-z0-9_]
\W:匹配任何非字类字符[^A-Za-z0-9_]
\b:代表单词的分割
*************************************awk******************************************
1.awe的命令格式
awk [optiong] 'command' file(s)
其中command的组成:pattern {awk的操作命令}
pattern可以是正则表达式或者逻辑判断
awk的操作命令的组成为:内置函数:print() printf()
控制指令:if(){}else{} while(){}
2.awk的内置函数
1)$0:表示整个当前行
$1:表示该行的第一个参数
2)awk 内置参数:分隔符
例子:awk -F ':' '{print $3}' /etc/password
awk -F ':' '{print $3 "\t " $1}' /etc/password
3)NR:每行的记录号
NF:每行字段数量的变量
FILENAME:正在处理的文件名
例子:awk -F ':' '{print NR NF}' /etc/password
3.实际应用
1)输出password文件中每行的行号,列好,以及用户名。分别用print和printf实现
awk -F ':' '{print "Line: "NR,"col: "NF,"User: "$1 }' /etc/password
awk -F ':' '{printf("Line:%s clo:%s User:%s",NR,NF,$1)}' /etc/password
2)输出uid大于100的行号列号
awk -F ':' '{if ($3>100) print "Line: "NR,"col: ":NF}' /etc/password
3)输出系统日志中为ERROR的日志的日期
awk '/Error/{print $}' /etc/log
4.逻辑判断
1)匹配正则:~,!~
2)判断逻辑:==,!=,<,>
实际应用:
输出password文件中第一个参数首字母为m开头的
awk -F ':' '$1 ~/^m.* {print $1}' /etc/password
5.awk的扩展模式
command2的扩展
BEGIN{print "start"}pattern{command}END{print "end"}
awk读取行的过程其实是一个循环文件行的过程。所以本质是一个循环。
BEGIN{print "start"}:在循环前,是一个初始化的过程
END{pring "end"}:在循环后。是一个读取后的过程
实际应用:
1)制表现实password文件的行号列号以及用户名
awk -F ':' 'BEGIN{print "Line clo User"}{print NR,NF,$3}END{print "------"FILENAME"-----------"}' /etc/password
2)统计当前文件夹下的文件、文件夹的大小
ls -l | awk 'BEGIN{size=0}{size+=$5}END{print "size=" size/1024/1024"M"}'
3) 统计现实password的账户总人数
awk -F ':' 'BEGIN{count=0}$1!~/^$/{count++}END{print "count=" count}' passw
4)统计现实uid大于100的用户名
awk -F ':' 'BEGIN{count=0}{if ($3>100) name[count++]=$1}END{for(i=0;i<count;i++) print i,name[i]}' passwd
5)统计netstat -anp中LISTEN的CONNETCT的数量
netstat -anp| awk '$6~/CONNECTED|LISTEN/{sum[$6]++}END{for(i in sum) print i,sum[i]}'