Linux三剑客
- grep:擅长单纯的查找或匹配文本内容
- sed:更适合格式化文本内容,对文本进行复杂处理
- awk:更适合编辑、处理匹配到的文本内容
三剑客使用快讯
gerp(过滤)
-E 开启扩展正则表达式 -w 显示匹配结果只能是单独的单词
-n 显示行号 -i 不论内容大小写
-v 反转内容 -c 显示匹配数量
“^x” 以什么开头的内容 “x$” 以什么结尾的内容sed(替换、删除)
-n 只剩搜索内容,其他没有进行操作的全不要
sed -n “/输入你要找的内容,比如^#,以井号开头/p” linaxi.txt
-i 写入到原文件 p打印 d删除awk(高级文本处理)
案例1:(删除文本的空行)
1.用grep方法
grep -v “^$” lianxi.txt #空行的内容的反值 grep “[^^$]” lianxi.txt #不是空行的内容
2.用sed方法
sed “/^$/d” lianxi.txt #取到空行并删除
3.用awk方法
awk ‘!/^$/{print $0}’ lianxi.txt #不是空行的内容打印
案例2:(找出禁止登陆用户)
找出pwd.txt文件中禁止登陆的用户( /sbin/nologin )
用grep找出
grep ‘/sbin/nologin$’ pwd.txt
awk用正则得用双斜杠
awk ‘/\/sbin\/nologin$/{print $0}’ pwd.txt
这里面需要注意的一个是awk调用//双斜杠不要忘了,或者遗漏;另一个是路径中的/是不是和我们awk正则表达冲突了,所以我们要用\来转义,不然就出错了
案例3:(找出文件区间)
正则模式
awk ‘/正则表达式/{动作}’ file.txt
行范围模式
awk ‘/正则1/,/正则2/{动作}’ file.txt
- 找出mail用户到nobody用户之间的内容
awk ‘/^mail/,/^nobody/{print $0}’ pwd.txt
相当于我们利用了两个正则表达式,取两种开头之间的所有内容进行打印
- 关系表达式模式
awk ‘NR>=4 && NR<=8 {print $0}’ pwd.txt
案例4:(日志ip访问量)
进入这个路径 cd /opt/ngx112/logs/ ,就可以看到里面的这个文件 access.log ,里面的内容都是一些访问记录,写了什么ip访问过Nginx软件
sort -n 数字从大到小排序
wc -l 统计行数,也就是ip的条目数
awk ‘{print $1}’ access.log | sort -n | uniq | wc -l
所以,我们知道这个日志文本后,我们进行寻找第一列的ip信息,再进行排序,去重,我们是不是就能得出有多少用户访问过我们的软件了呢?
加深难度:
我们又可以通过排序,显示重复次数,然后再次排序,反转,我们是不是就能够得到访问次数最多的ip地址了呢
awk ‘{print $1}’ access.log | sort -n | uniq -c | sort -nr | head -10
