文章目录
grep
个人觉得egrep比较好用,感觉改良了grep的一些不可以直接操作的东西,但是总体来说还是没太大区别的,都是一个过滤工具。
grep 和 egrep 都要通过 正则表达式来筛选我们想要的东西,只能筛选文本内容,不能对目录筛选,如果想筛选目录可以通过管道把目录传过去,或者把目录存到文件里头再筛选
1…查询文件/logs/foo.log以”abc”结尾的行。
答案:
grep “abc$” /logs/foo.log
2.多个文件中查找关键字
[root@room9pc01 ~]# grep “root” /etc/passwd /etc/hosts
/etc/passwd:root❌0:0:root:/root:/bin/bash
/etc/passwd:operator❌11:0:operator:/root:/sbin/nologin
3.-o 是只显示匹配到的字符
[root@nginx ~]# grep -o root /etc/passwd
root
root
root
root
4.-i是忽略大小写
5.-v是取反的意思
4.使用grep 统计当前文件夹的目录已经文件的个数
- 统计当前文件夹下文件的个数以及目录的个数:
文件个数统计
[root@king shell]# ls -l |grep "^-"|wc -l
14
目录个数的统计
[root@king shell]# ls -l | cut -c 1 | grep "d" | wc -l
2
[root@king shell]# ls -l |grep "^d"|wc -l
2
统计文件夹下目录的个数,包括子文件夹里的:
[root@king shell]# ls -lR|grep "^d"|wc -l
2
find
####1.查找/logs目录下前缀为access的文件并删除
答案:
find /logs -type f -name “access*” -exec rm -rf {} ;
2. 写一个脚本查找最后创建时间是三天前,后缀是*.log 的文件并删除。
答案:
find dir/ -mtime +3 -type f -name “.*.log” -exec rm -rf {} ;
####3. 写一个脚本将某目录下大于 100k 的文件移动至/tmp 下。
答案:
find dir/ -type f -size +100k -exec mv {} /tmp ;
5、grep -A -B -C 的使用
- 这三个选项,经常在过滤日志的时候使用到。不用打开日志文件并可以查看到日志内容
使用起来非常的方便
-A -B -C 后面都跟阿拉伯数字
-A是显示匹配后和它后面的n行。
-B是显示匹配行和它前面的n行。
-C是匹配行和它前后各n行。
总体来说,-C覆盖面最大。用它保险些。哈哈。这3个开关都是关于匹配行的上下文的(context)。
于是
grep -A 4 wikipedia 密码文件.txt
1
就是搜索密码文件,找到匹配“wikipedia”字串的行,显示该行后后面紧跟的4行。
cat info.log.2019-07-31* | grep -C 50 "13802885143"
使用该命令,有以下几个注意事项
1、-A -B -C 必须大写
2、 -A -B -C 后面加的是阿拉伯数字
3、-A -B -C 后面的关键字需要使用双引号,引住
5、 grep -E
- 背景 在过滤日志的时候,经常会有两个关键字进行过滤
- 这也是精准匹配和模糊匹配
两个关键字只有匹配一个就可以过滤出来
zcat info.log.2019-08-04* | grep -E "1564888980379|13972782679"
两个关键字只有一个匹配就可以匹配出来,并显示附件的50行
zcat info.log.2019-08-04* | grep -E -C 50 "1564888980379|13972782679"
两个关键字,两个都匹配了,才可以显示
zcat info.log.2019-08-04* | grep 13972782679 | grep yxbAwardUrl
两个关键字,两个都匹配了。才可以显示,并显示附件的10行
zcat info.log.2019-08-04* | grep -C 5 "13972782679" | grep -C 5 "yxbAwardUrl"
这是一个过滤日志时跟正则表达式发生冲突时,使用的过滤方法
cat debug.log.2019-08-27.bak | awk -F , '/已兑换数量:/{print $5}' | awk -F : '{prin$2}' | awk -F [ '{print $2}' | awk -F ] '{print $1}' | grep -c 1