grep 、sed、awk被称为linux中的"三剑客"。
功能特点:
grep适合查找功能
sed适合取行和替换
awk适合取分隔后的列
下面对这3个命令进行一个实践,另附加正则表达式。
1、grep查看文件中是否包含有指定的字段并打印出来,常用来查询日志、端口等
#查看文件中中含有8080字段的行
grep 8080 file
确定8080字段在文件中的行数
grep -n 8080 file
#确定redis在文件中的行数并且忽略大小写
grep -n -i "redis" file
#匹配当前目录下所有后缀为conf文件含有过滤字段的内容
grep 'redis' *.conf
2、过滤掉指定的日志信息(即含有关键字的行不显示)
grep -v '关键字' file
3、查看日志中的含有关键字error,打印行
grep redis_6379.log -e error
#查询34分到35分的日志内容
grep '11 May 2020 10:3[4-5]' redis_6379.log
注:在此按小时会报错,可用sed命令,下面有介绍
5、查询端口、服务信息
#查询统计6379端口的连接数
netstat -nat|grep -i "6379"|wc -l
#查询redis服务的端口、pid信息
ps -ef |grep redis
用于编辑匹配到的文本
1、取消#,去掉注释
sed -i -e '/name/s/^#//' /root/autoredis.sh
#等价于sed -i 's/^#name/name/' /root/autoredis.sh
2、增加注释
sed -i 's/^name/#&/' /root/autoredis.sh
## 这条命令是替换以name开头的 ,&的意思是匹配任意字符
3、利用 sed 将文件中的world用happy替换
sed -i 's/\world/\happy\g' rest
#将每一行结尾若为 . 则换成 !
sed -i 's/\.$/\!/g' rest
4、同时执行两条命令
#同时去掉name、info前面的注释
sed -i -e '/name/s/^#//' \-e '/info/s/^#//' /root/autoredis.sh
5、一次性多行注释
sed -i '2,5s/^/#/' filename
#vi输入中同样适用
6、取消多行注释
sed -i '2,5s/^#//' filename
7、 根据日期查询日志
sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log
注意:其中日期由系统日志中的具体格式决定
8、利用 sed 直接在 文件最后一行加入 #This is a test:
sed -i '$a # This is a test' file
9、使用sed -n查询,并且输出至aa.log文件
sed -n ‘/Mar 15 19:01:01/,/Mar 15 23:01:01/p’ cron >aa.log
注意 开始时间、结束时间一定要和linux里面的显示时间保持格式一致,且一定要是日志里面有的时间点,否则查询不出来或者查询结果不符合预期。
(起始时间不是的话,查询无结果。结束时间不是的话,查询至日志的最后结束时间)
对分隔后的行中的列进行处理,也可进行格式化输出
awk [options] 'BEGIN{ action;… } pattern{ action;… } END{ action;… }' file
1、去掉以#开头的行,再重定向到aaa.log中
awk -F: '($1 !~ /^#/){print $0}' outredis.conf >aaa.log
具体可以参考:https://blog.csdn.net/Junetest/article/details/106047999