霜天部落 | 专注PHP研发,研究LAMP高性能架构部署与优化

linux grep用法大全

在Linux中经常会用到grep去选取所需要的信息,用好grep有时可以到达意想不到的效果。下面介绍一下grep的主要用法:

Grep : g (globally) search for a re (regular expression_r_r ) and p (print ) the results.

1、参数:
-I :忽略大小写
-c :打印匹配的行数
-l :从多个文件中查找包含匹配项
-v :查找不包含匹配项的行
-n:打印包含匹配项的行和行标

2、RE(正则表达式)
\ 忽略正则表达式中特殊字符的原有含义
^ 匹配正则表达式的开始行
$ 匹配正则表达式的结束行
\< 从匹配正则表达式的行开始
\>; 到匹配正则表达式的行结束
[ ] 单个字符;如[A] 即A符合要求
[ – ] 范围 ;如[A-Z]即A,B,C一直到Z都符合要求
. 所有的单个字符
* 所有字符,长度可以为0

# cat access.log(显示我们所查文件的内容)
48 Dec 3BC1997 LPSX 68.00 LVX2A 138
483 Sept 5AP1996 USP 65.00 LVX2C 189
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
219 dec 2CC1999 CAD 23.00 PLV2C 68
484 nov 7PL1996 CAD 49.00 PLV2C 234
487 may 5PA1998 USP 37.00 KVM9D 644
471 May 7Zh1999 UDP 37.00 KV30D 643

# grep -c “48” access.log(统计所有以“48”字符开头的行有多少)

# grep -i “May” access.log(不区分大小写查找“May”所有的行)
487 may 5PA1998 USP 37.00 KVM9D 644
471 May 7Zh1999 UDP 37.00 KV30D 643

# grep -n “48” access.log(显示行号;显示匹配字符“48”所在的行的行号)
1:48 Dec 3BC1997 LPSX 68.00 LVX2A 138
2:483 Sept 5AP1996 USP 65.00 LVX2C 189
5:484 nov 7PL1996 CAD 49.00 PLV2C 234
6:487 may 5PA1998 USP 37.00 KVM9D 644

# grep -ni “may” access.log(显示行号;显示匹配字符“may”所在的行的行号,不区分大小写)

# grep -v “48” access.log(显示输出没有字符“48”所有的行)
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
219 dec 2CC1999 CAD 23.00 PLV2C 68
471 May 7Zh1999 UDP 37.00 KV30D 643

# grep “471” access.log(显示输出字符“471”所在的行)
471 May 7Zh1999 UDP 37.00 KV30D 643

# grep “48>” access.log(精确显示输出字符“48”所在的行)
48 Dec 3BC1997 LPSX 68.00 LVX2A 138

# grep “48<tab>” access.log(显示输出以字符“48”开头,并在字符“48”后是一个tab键所在的行
注:tab键,安一下tab键即可;和精确显示输出的结果是相同的)
48 Dec 3BC1997 LPSX 68.00 LVX2A 138

# grep “48[34]” access.log(显示输出以字符“48”开头,第三个字符是“3”或是“4”的所有的行)
483 Sept 5AP1996 USP 65.00 LVX2C 189
484 nov 7PL1996 CAD 49.00 PLV2C 234

# grep ’48[34]’ access.log(注意使用单引号(‘’)和使用双引号(“”)在Solaris8中输出的结果是一样的;
即:单引号、和双引号是通用的,只要你养成一种习惯就好)
483 Sept 5AP1996 USP 65.00 LVX2C 189
484 nov 7PL1996 CAD 49.00 PLV2C 234

# grep “^[^48]” access.log(显示输出行首不是字符“48”的行)
219 dec 2CC1999 CAD 23.00 PLV2C 68

# grep “[Mm]ay” access.log(设置大小写查找:显示输出第一个字符以“M”或“m”开头,以字符“ay”结束的行)
487 may 5PA1998 USP 37.00 KVM9D 644
471 May 7Zh1999 UDP 37.00 KV30D 643

# cat access.log(再次显示我们所使用的文件的内容)
48 Dec 3BC1997 LPSX 68.00 LVX2A 138
483 Sept 5AP1996 USP 65.00 LVX2C 189
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
219 dec 2CC1999 CAD 23.00 PLV2C 68
484 nov 7PL1996 CAD 49.00 PLV2C 234
487 may 5PA1998 USP 37.00 KVM9D 644
471 May 7Zh1999 UDP 37.00 KV30D 643

# grep “K…D” access.log(显示输出第一个字符是“K”,第二、三、四是任意字符,第五个字符是“D”所在的行)
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
487 may 5PA1998 USP 37.00 KVM9D 644
471 May 7Zh1999 UDP 37.00 KV30D 643

# grep “[A-Z][A-Z][A-Z][9]D” access.log(显示输出第一个字符的范围是“A-D”,第二个字符的范围是“A-D”,
第三个字符的范围是“A-D”,第四个字符是“9”,第五个字符的是“D”,所有的行:已知所查字符串的长度为5位)
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
487 may 5PA1998 USP 37.00 KVM9D 644

# grep “5..1998” access.log
487 may 5PA1998 USP 37.00 KVM9D 644

# grep “[35]..1998” access.log(显示输出第一个字符是“3”或“5”,第二、三个字符是任意,以1998结尾的所有行;已知所查字符串的长度是7位)
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
487 may 5PA1998 USP 37.00 KVM9D 644
#

# grep “4{2,}” access.log(模式出现几率查找:显示输出字符“4”至少重复出现两次的所有行)
487 may 5PA1998 USP 37.00 KVM9D 644

# grep “9{3,}” access.log(模式出现几率查找:显示输出字符“9”至少重复出现三次的所有行)
219 dec 2CC1999 CAD 23.00 PLV2C 68
471 May 7Zh1999 UDP 37.00 KV30D 643

# grep “9{2,3}” access.log(模式出现几率查找:显示输出字符“9”重复出现的次数在一定范围内(重复出现2 次或3次)所有行)
48 Dec 3BC1997 LPSX 68.00 LVX2A 138
483 Sept 5AP1996 USP 65.00 LVX2C 189
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
219 dec 2CC1999 CAD 23.00 PLV2C 68
484 nov 7PL1996 CAD 49.00 PLV2C 234
487 may 5PA1998 USP 37.00 KVM9D 644
471 May 7Zh1999 UDP 37.00 KV30D 643

# grep -n “^$” access.log(显示输出空行的行号)