一、grep
作者:互联网
1、基本使用
1.1 常用选项
-c 只输出匹配行的计数
-i 不区分大小写
-l 查询多文件时只输出包含匹配字符的文件名
-n 显示匹配行及行号
-s 不显示错误信息
-v 显示不包含匹配文本的所有行
-q 用于shell中if判断,不显示任何信息。
注:匹配的字符串或变量用双引号,模式匹配用单引号。
1.2 示例
- 可匹配到的行数
[root@netposa13501206 ~]# cat 1.log
abc wfe 133 fwef
abcd ewd 21r2 1323r
abd asf e2dd 469
AbC ewf ws 3rt
aBC er2 444t5
[root@netposa13501206 ~]# grep -c "abc" 1.log
2
- 显示行号
[root@netposa13501206 ~]# grep -n "abc" 1.log
1:abc wfe 133 fwef
2:abcd ewd 21r2 1323r
- 反向匹配
[root@netposa13501206 ~]# grep -n -v "abc" 1.log
3:abd asf e2dd 469
4:AbC ewf ws 3rt
5:aBC er2 444t5
- 精准匹配
[root@netposa13501206 ~]# grep -n "abc\>" 1.log
1:abc wfe 133 fwef
- 不区分大小写
[root@netposa13501206 ~]# grep -n -i "abc" 1.log
1:abc wfe 133 fwef
2:abcd ewd 21r2 1323r
4:AbC ewf ws 3rt
5:aBC er2 444t5
2、正则表达式
2.1 模式范围
# 精确匹配存在abc或者abd的行
[root@netposa13501206 ~]# grep -n 'ab[cd]\>' 1.log
1:abc wfe 133 fwef
3:abd asf e2dd 469
2.2 不匹配行首
# 显示行首不是a开头的行
[root@netposa13501206 ~]# grep -n '^[^a]' 1.log
4:AbC ewf ws 3rt
2.3 匹配任意字符
# 匹配3个字符组成的字符串,第一个为任意大写字符,最后一个为大写字母C,中间为任意1个字符
[root@netposa13501206 ~]# grep -n '[A-Z].C' 1.log
4:AbC ewf ws 3rt
2.4 日期匹配
# 匹配以3开头、随后跟2个任意字符、再跟199、最后一位是6或者7的7位字符串
[root@netposa13501206 ~]# cat 2.log
48 Dec 3BC1997 LPSX 68.00 LVX2A
483 Sep 5AP1996 USP 65.00 LVX2C
47 Oct 3ZL1998 LPSX 43.00 KVM9D
219 Dec 2CC1999 CAD 23.00 PLV2C
483 Nov 7PL1996 CAD 49.00 PLV2C
483 May 5PA1998 USP 37.00 KVM9D
216 Sep 3ZL1998 USP 86.00 KVM9E
[root@netposa13501206 ~]# grep -n '3..199[6,7]' 2.log
1:48 Dec 3BC1997 LPSX 68.00 LVX2A
# 查询包含1996的所有行
[root@netposa13501206 ~]# grep -n '[0-9]\{3\}[6]' 2.log
2:483 Sep 5AP1996 USP 65.00 LVX2C
5:483 Nov 7PL1996 CAD 49.00 PLV2C
2.5 范围组合
# 查询行首为3个数字,第一个小于4、第二个为1、第三个小于8
[root@netposa13501206 ~]# grep -n '^[0-3][1][0-7]' 2.log
7:216 Sep 3ZL1998 USP 86.00 KVM9E
2.6 模式出现几率
# 至少出现2次9
[root@netposa13501206 ~]# grep '9\{2,\}' 2.log
48 Dec 3BC1997 LPSX 68.00 LVX2A
483 Sep 5AP1996 USP 65.00 LVX2C
47 Oct 3ZL1998 LPSX 43.00 KVM9D
219 Dec 2CC1999 CAD 23.00 PLV2C
483 Nov 7PL1996 CAD 49.00 PLV2C
483 May 5PA1998 USP 37.00 KVM9D
216 Sep 3ZL1998 USP 86.00 KVM9E
# 出现3次9
[root@netposa13501206 ~]# grep '9\{3\}' 2.log
219 Dec 2CC1999 CAD 23.00 PLV2C
# 出现2~6次8,并以3结尾
[root@netposa13501206 ~]# cat 3.log
83
888883
8884
88883
[root@netposa13501206 ~]# grep -n '8\{2,6\}[3]' 3.log
2:888883
4:88883
2.7 grep的“与”、“或”
# 与的用法。483开头并且包含"Sep"字符串
[root@netposa13501206 ~]# grep '^483' 2.log | grep "Sep"
483 Sep 5AP1996 USP 65.00 LVX2C
# 或的用法。以483开头或者C开头的3个大写字母串
[root@netposa13501206 ~]# grep '^483\|[C][A-Z]\{2\}' 2.log
483 Sep 5AP1996 USP 65.00 LVX2C
219 Dec 2CC1999 CAD 23.00 PLV2C
483 Nov 7PL1996 CAD 49.00 PLV2C
483 May 5PA1998 USP 37.00 KVM9D
2.8 空行
# 显示非空行
[root@netposa13501206 ~]# cat 4.log
83
888883
8884
88883
[root@netposa13501206 ~]# grep -v '^$' 4.log
83
888883
8884
88883
2.9 特殊字符
$ . ' " * [] ^ | \ + ?,必须在特定字符前加\
2.10 匹配文件名
# 匹配最多6个小写字符,后跟句点,再接两个大写字符
[root@netposa13501206 ~]# cat 6.log
yrend.AS
mothdf
soa.PP
qp.RR
[root@netposa13501206 ~]# grep '^[a-z]\{1,6\}\.[A-Z]\{2\}' 6.log
yrend.AS
soa.PP
qp.RR
2.11 匹配IP地址
# 找出合法的IP地址
[root@netposa13501206 ~]# cat 7.log
192.18.1.a
1232.12.1.3
13.1.5
172.16.254.221
12.114.4.241
x.123.com
[root@netposa13501206 ~]# grep '^[1-9]\{2,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' 7.log
172.16.254.221
12.114.4.241
标签:grep,log,匹配,root,netposa13501206,483 来源: https://www.cnblogs.com/ly447742/p/13952901.html