其他分享
首页 > 其他分享> > 一、grep

一、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