linux_NGIN:~/script/grep> more data.f
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
483 may 5PA1998 USP 37.00 KVM9D 644
216 sept 3ZL1998 USP 86.00 KVM9E 234
1、GREP
格式:
grep [选项] 基本正则表达式 [文件]
双引号引用:
防止误解为shell命令;可用来查找多个单词组成的字符串。调用模式匹配时,才用单引号。
grep选项:
-c 只输出匹配行的计数
-i 不区分大小写(只适用于单字符)
-h 查询多文件时不显示文件名
-l 查询多文件时只显示包含匹配字符的文件名
-n 显示匹配行及行号
-s 不显示不存在或无匹配文本的错误信息
-v 显示不包含匹配文本的所有行
linux_NGIN:~/script/grep> grep -c "48" data.f ----显示匹配行数
4
linux_NGIN:~/script/grep> grep -n "48" data.f ----显示行数
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:483 may 5PA1998 USP 37.00 KVM9D 644
linux_NGIN:~/script/grep> grep -v "48" data.f ------显示非匹配行
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
219 dec 2CC1999 CAD 23.00 PLV2C 68
216 sept 3ZL1998 USP 86.00 KVM9E 234
linux_NGIN:~/script/grep> grep "48\>" data.f -------精确匹配
48 Dec 3BC1997 LPSX 68.00 LVX2A 138
2、GREP和正则表达式(单引号括起来)
模式范围:
不匹配行首:
linux_NGIN:~/script/grep> grep '^[^84]' data.f
219 dec 2CC1999 CAD 23.00 PLV2C 68
216 sept 3ZL1998 USP 86.00 KVM9E 234
设置大小写:
linux_NGIN:~/script/grep> grep '[Dd]ec' data.f
48 Dec 3BC1997 LPSX 68.00 LVX2A 138
219 dec 2CC1999 CAD 23.00 PLV2C 68
匹配任意字符:
linux_NGIN:~/script/grep> grep '[A-Z][A-Z]..C' data.f
483 Sept 5AP1996 USP 65.00 LVX2C 189
219 dec 2CC1999 CAD 23.00 PLV2C 68
484 nov 7PL1996 CAD 49.00 PLV2C 234
日期查询:
linux_NGIN:~/script/grep> grep '[0-9]\{3\}[8]' data.f
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
483 may 5PA1998 USP 37.00 KVM9D 644
216 sept 3ZL1998 USP 86.00 KVM9E 234
范围组合:
linux_NGIN:~/script/grep> grep '^[0-9][0-5][0-6]' data.f
216 sept 3ZL1998 USP 86.00 KVM9E 234
模式出现机率:
linux_NGIN:~/script/grep> grep '4\{2,\}' data.f
483 may 5PA1998 USP 37.00 KVM9D 644
匹配“与”或“或”模式:
linux_NGIN:~/script/grep> grep -E '219|216' data.f
219 dec 2CC1999 CAD 23.00 PLV2C 68
216 sept 3ZL1998 USP 86.00 KVM9E 234
空行:
grep '^$' data.f
匹配特殊字符:
grep '\.' data.f
grep "\^" data.f
查询格式化文件名:
grep '[^a-z]\{1,6\}\.[^A-Z]\{1,2\}' filename
查询IP文件地址:
grep '[0-9]\{3\}.[0-9]\{3}\.' ipfile
3、类名
[[:upper:]]
[[:lower:]]
[[:upper:]]
[[:digit:]]
[[:upper:]]
3、类名
[[:upper:]] [A-Z]
[[:lower:]] [a-z]
[[:digit:]] [0-9]
[[:almun:]] [0-9a-zA-Z]
[[:space:]] 空格或者tab
[[:alpha:]] [a-zA-Z]
linux_NGIN:~/script/grep> grep '5[[:upper:]][[:upper:]]' data.f
483 Sept 5AP1996 USP 65.00 LVX2C 189
483 may 5PA1998 USP 37.00 KVM9D 644
linux_NGIN:~/script/grep> grep '[[:upper:]][[:upper:]][P,D]' data.f
483 Sept 5AP1996 USP 65.00 LVX2C 189
219 dec 2CC1999 CAD 23.00 PLV2C 68
484 nov 7PL1996 CAD 49.00 PLV2C 234
483 may 5PA1998 USP 37.00 KVM9D 644
216 sept 3ZL1998 USP 86.00 KVM9E 234
4、系统grep命令
linux_NGIN:~/script> ls -l | grep '^d'
linux_NGIN:~/script> ls -l | grep '^[^d]'
linux_NGIN:~ # grep "test" /etc/passwd >/dev/null 2>&1
linux_NGIN:~ # ps ax | grep "named"
2455 pts/7 S+ 0:00 grep named
linux_NGIN:~ # ps ax | grep "named" | grep -v "grep"
5、egrep命令(可以以一个文件做为保存的字符串传给grep做为参数,使用-f 开关;接收所有正则表达式)
grep -f file1 data.f
linux_NGIN:~/script/grep> egrep 'USP|CAD' data.f
483 Sept 5AP1996 USP 65.00 LVX2C 189
219 dec 2CC1999 CAD 23.00 PLV2C 68
484 nov 7PL1996 CAD 49.00 PLV2C 234
483 may 5PA1998 USP 37.00 KVM9D 644
216 sept 3ZL1998 USP 86.00 KVM9E 234
see119:~ # who | egrep '(enip|bmp)'
enip pts/1 Nov 16 10:39 (10.137.119.219)
bmp pts/5 Nov 16 08:48 (10.138.56.82)
enip pts/9 Nov 10 22:58 (10.138.56.74)
see119:~ # who | egrep -v '^(enip|bmp)'