正则表达式
^ | 以…开头 |
---|---|
$ | 以…结尾 |
^$ | 空行 |
. | 表示任意一个字符 |
.* | 表示所有 |
[abc] | 匹配a或者b或者c |
[^ab] | 不匹配a或者b 取反 |
| | 或者 |
() | 表示里面内容为一个整体 |
* | 前一个字符连续出现零次或者零次以上 |
+ | 前一个字符出现一次或一次以上 |
? | 出现一次或者零次 |
a{3,5} | >=3 <=5 |
---|---|
a{3} | ==3 |
a{3,} | >=3 |
a{,5} | <=5 |
grep 参数 -v: 取反,排除
-o:显示匹配过程
-n:显示行号
-E:使用正则表达式
-r:递归查询,找出一个目录中包含xxx的文件
-l:只显示文件名+路径,多和-r一起用
-c:统计行数
-i:忽略,不区分大小写
-w:按照单词进行匹配
-A:-after
sed
使用方式 sed -n ‘3p’ liu.txt :显示第三行
sed -n ‘1,3p’ liu.txt :显示第一行到第三行
sed -n ‘/liulaoliu/p’ liu.txt :显示包含liulaoliu的行
sed -n ‘/{/,/}/p’ liu.txt :显示花括号以内的行
awk
参数 -F:指定分隔符
-v:修改内置变量
-vOFS=; :修改显示出的分隔符为;
用法 awk ‘/{/,/}/{if(/liulao/)print}’ cshi.log
#显示{}里面的liulao,并使用if进行判断
awk ‘/liulao/’ cshi.log
#匹配包含liulao的行
awk -F: ‘$5==“root”’ /etc/passwd
#匹配第五列等于root的行,awk里面如果不加引号,则将其视为一个变量
awk ‘{sum[$1]=sum[$1]+$10}END{for(i in sum)print sum[i],i}’ access.log |sort -rn|head
#统计nginx日志文件每个IP地址使用的流量
awk ‘{sum[$1]=sum[$1]+1}END{for(i in sum)print sum[i],i}’ access.log |sort -rn|head
#统计每个IP地址出现的次数
FIELDWIDTHS
[root@liulao ~]# echo "20190325"
20190325
[root@liulao ~]# echo "20190325"|awk -vFIELDWIDTHS="4 2 2" '{print $1,$2,$3}'
2019 03 25
.## 【awk精讲-从进阶到果断放弃】awk ‘$NF~/bash/’ /etc/passwd
#/etc/passwd下最后一列以bash结尾的
awk ‘/{/,/}/ {if(/liu/)i++} END{print i}’ cshi.log
#统计文件{}中liu出现的次数
awk ‘{sum=sum+$9} END{print sum}’ access.log
#计算nginx访问日志中流量总数
awk ‘{sum=sum+$9} END{print sum/1024^3}’ access.log
#折算成以GB为单位