grep功能简介

有时你需要在成百上千的日志中搜索到莫一特定用户的记录;
有时你需要在一个文件中匹配多个关键字;
有时你需要筛除掉一些特定的显示;

你该怎么做?

1、 单个文件中搜索特定 ‘字符串’

被搜索到的字符会高亮显示,我这里显示为红色

  [root@d8a4ced9-4996-52cb-a ~]#grep sk_list_app_terminal rcac.log
  2022-03-08 11:56:17,933 <INFO> [log_auto.py 44] [log_front] <openapi> enter <name:'sk_list_app_terminal', token:None>
2022-03-08 11:57:17,934 <INFO> [log_auto.py 44] [log_front] <openapi> enter <name:'sk_list_app_terminal', token:None>
2022-03-08 11:58:17,932 <INFO> [log_auto.py 44] [log_front] <openapi> enter <name:'sk_list_app_terminal', token:None>
2022-03-08 11:59:17,933 <INFO> [log_auto.py 44] [log_front] <openapi> enter <name:'sk_list_app_terminal', token:None>

在这里插入图片描述

[root@d8a4ced9-4996-52cb-a ~]#cat rcac.log |grep sk_list_app_terminal
2022-03-08 09:46:15,334 <INFO> [log_auto.py 44] [log_front] <openapi> enter <name:'sk_list_app_terminal', token:None>
2022-03-08 09:46:19,330 <INFO> [log_auto.py 44] [log_front] <openapi> enter <name:'sk_list_app_terminal', token:None>
2022-03-08 09:46:23,330 <INFO> [log_auto.py 44] [log_front] <openapi> enter <name:'sk_list_app_terminal', token:None>

在这里插入图片描述

2、对多个字段进行搜索

grep -E “telnet|SSH|web|rsync|ftp|systemd|master|SNMP” 1.txt

[root@d8a4ced9-4996-52cb-a ~]# grep -E "telnet|SSH|web|rsync|ftp|systemd|master|SNMP" 1.txt
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2627/master         
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      2627/master         
udp        0      0 0.0.0.0:111             0.0.0.0:*                           1/systemd           
udp6       0      0 :::111                  :::*                                1/systemd  

3、多重过滤+反向搜索grep -v

cat 1.txt|grep -v docker |grep -v qemu
注:反向过滤的意思是显示除-v 后面搜索的内容

4、不区分大小写

grep -i docker 1.txt
注:-i 是不区分大小写,比如可以搜索到DOCKEr dockeR…之类

5、对文件夹中莫些特定字段进行搜索

grep -RHn 'dfjkflfl ’ /path/forld

grep -RHn uuid:\'00b8e4e2-9b5f-11ec-ac9a-0242ac1ffd2f ./sh/

在这里插入图片描述
grep 选项

选项功能描述
-i忽略大小写。不区分大写和小写字符,也可以用–ignore-case指定
-v不匹配。正常情况下,grep会输出匹配行,而该选项可使grep输出不包含匹配项的所有行。也可以用–invert-match指定
-c输出匹配项数目(如果有-v选项,那就输出不匹配项的数目)而不是直接输出匹配行自身。也可以用–count指定
-l输出匹配项文件名而不是直接输出匹配行自身。也可以用–files-with-matches指定
-L与-l选项类似,但输出的是不包含匹配项的文件名。也可以用–files-without-match指定
-n在每个匹配行前面加上该行在文件内的行号。也可以用–line-number指定
-h进行多文件搜索时,抑制文件名输出。也可以用–no-filename指定
-H为每一匹配项打印文件名

grep
其他用法见grep -h

正则表达式匹配 (^ $ . [ ] { } - ? * + ( ) | \)

(^表以什么开头,$表以什么结尾)

[root@d8a4ced9-4996-52cb-a93c-dsh]# cat eeeee 
zhidao
1zhidao2
1zhidao3
zhidao4
3zhidao
[root@d8a4ced9-4996-52cb-a93c-d sh]# grep '^zhidao$' eeeee 
zhidao
[root@d8a4ced9-4996-52cb-a93c-d sh]# grep '1zhidao' eeeee 
1zhidao2
1zhidao3

“.” 表示一个字符

[root@d8a4ced9-4996-52cb-a93c-d sh]# cat  ey.txt
wordj
major
1major
adjor3
3adjor
adjor
[root@d8a4ced9-4996-52cb-a93c-d sh]# grep -i '^..j.r$' ey.txt 
major
adjor
[root@d8a4ced9-4996-52cb-a93c-d sh]# 

[]表可匹配[]中任意字符

[root@d8a4ced9-4996-52cb-a93c-d sh]# cat  ey.txt
wordj
major
1major
adjor3
3adjor
adjor
[root@d8a4ced9-4996-52cb-a93c-d sh]# grep -i '^[13]..j.r$' ey.txt 
1major
3adjor
grep -h '^[A-Za-z0-9]' ey.txt

{ } - ? * + ( ) | \

?:表匹配莫元素0次或1次;
*:表匹配莫元素0次或多次;
+:表匹配莫元素1次或多次;
{}:制定次数匹配莫元素;
|:或;
\:是常用的转义符,用来在正则中需要匹配一些特殊符号时使用

指定匹配次数指定项含义
{n}前面的元素恰好出现n次则匹配
{n,m}前面的元素出现的次数在n~m次之间时则匹配
{n,}前面的元素出现次数超过n次则匹配
{,m}前面的元素出现次数不超过m次则匹配
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐