grep 、sed、awk三剑客应用

一、定义

grep 、sed、awk被称为linux中的"三剑客"。
功能特点:
grep适合查找功能
sed适合取行和替换
awk适合取分隔后的列
下面对这3个命令进行一个实践,另附加正则表达式。

二、grep

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

grep 、sed、awk三剑客应用_第1张图片
4、grep只能按分钟和秒进行查询日志

#查询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

在这里插入图片描述

三、sed

用于编辑匹配到的文本
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

grep 、sed、awk三剑客应用_第2张图片

#将每一行结尾若为 . 则换成 !
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

对分隔后的行中的列进行处理,也可进行格式化输出

awk [options] 'BEGIN{ action;… } pattern{ action;… } END{ action;… }' file

1、去掉以#开头的行,再重定向到aaa.log中

awk -F: '($1 !~ /^#/){print $0}' outredis.conf >aaa.log

grep 、sed、awk三剑客应用_第3张图片

具体可以参考:https://blog.csdn.net/Junetest/article/details/106047999

五、正则表达式

正则表达式,又称规则表达式。通常被用来检索、替换那些符合某个模式(规则)的文本。
grep 、sed、awk三剑客应用_第4张图片

你可能感兴趣的:(Linux相关,linux)