grep三种变形
1.grep:标准命令,查找文本,可使用正则表达式。
2.egrep:扩展grep,支持基本及扩展的正则表达式,但不支持\p模式范围的应用。
3.fgrep:快速grep,允许查找字符串而不是一个模式。
在grep命令中,输入字符串参数时,最好将其用双引号括起来。
grep命令选项:
-c:只输出匹配行数
-i:不区分大小写(只适用单字符)
-h:查询多个文件时,不显示文件名
-l:查询多文件时,只输出包含匹配字符的文件名
-n:显示匹配行及行号
-s:不显示不存在或无匹配文本的错误信息
-v:显示不包含匹配文件的所有行
查询多个文件:grep “sort” *.doc
在所有文件中,查询”sort it”:grep “sort it” *
查看data.f文件的内容
pg data.f
48 Dec 3BC1997 LPSX 68.00 LVX2A 138
483 Sept 5AP1996 USP 65.00 LVX2C 189
47 Otc 3Z1998 LPSX 43.00 KVM9D 512
219 DEC 2CC1999 CAD 23.00 PLV2C 68
484 nov 7PA1998 CAD 49.00 PLV2C 234
483 may 5PA1998 USP 37.00 KVM9D 644
216 sept 3ZL1998 USP 86.00 KVM9E 234
包含“48”的行数:
grep -c “48” data.f
4
包含“48”的所有行:
grep “48” data.f
48 Dec 3BC1997 LPSX 68.00 LVX2A 138
483 Sept 5AP1996 USP 65.00 LVX2C 189
484 nov 7PA1998 CAD 49.00 PLV2C 234
483 may 5PA1998 USP 37.00 KVM9D 644
显示匹配行的行号:
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 7PA1998 CAD 49.00 PLV2C 234
6:483 may 5PA1998 USP 37.00 KVM9D 644
显示不包含“48”的行:
grep -v “48” data.f
47 Otc 3Z1998 LPSX 43.00 KVM9D 512
219 DEC 2CC1999 CAD 23.00 PLV2C 68
216 sept 3ZL1998 USP 86.00 KVM9E 234
忽略大小写:
grep -i “sept” data.f
483 Sept 5AP1996 USP 65.00 LVX2C 189
216 sept 3ZL1998 USP 86.00 KVM9E 234 grep和正则表达式:
1.不匹配行首:
grep ‘^[^48]’ data.f
219 DEC 2CC1999 CAD 23.00 PLV2C 68
216 sept 3ZL1998 USP 86.00 KVM9E 234
2.模式范围:
grep ’48[34]’ data.f
483 Sept 5AP1996 USP 65.00 LVX2C 189
484 nov 7PA1998 CAD 49.00 PLV2C 234
483 may 5PA1998 USP 37.00 KVM9D 644
3.大小写
grep ‘[Ss]ept’ data.f
483 Sept 5AP1996 USP 65.00 LVX2C 189
216 sept 3ZL1998 USP 86.00 KVM9E 234
4.匹配任意字符
K后面3个字符,然后接着D:
grep ‘K…D’ data.f
47 Otc 3Z1998 LPSX 43.00 KVM9D 512
483 may 5PA1998 USP 37.00 KVM9D 644
K后面跟着2个字符,然后接着9:
grep ‘K.\{2\}9’ data.f
47 Otc 3Z1998 LPSX 43.00 KVM9D 512
483 may 5PA1998 USP 37.00 KVM9D 644
216 sept 3ZL1998 USP 86.00 KVM9E 234
头2个字符为大写字母,以C结尾,中间2个任意字符:
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 7PA1998 CAD 49.00 PLV2C 234
grep ‘5..199[6,8]’ data.f
483 Sept 5AP1996 USP 65.00 LVX2C 189
483 may 5PA1998 USP 37.00 KVM9D 644
匹配一行中的任意位置:
grep ‘[0-9][0-5][0-6]’ data.f
47 Otc 3Z1998 LPSX 43.00 KVM9D 512
484 nov 7PA1998 CAD 49.00 PLV2C 234
483 may 5PA1998 USP 37.00 KVM9D 644
216 sept 3ZL1998 USP 86.00 KVM9E 234
匹配行首的位置:
grep ‘^[0-9][0-5][0-6]’ data.f
216 sept 3ZL1998 USP 86.00 KVM9E 234
至少出现n次:
grep ‘4\{2,\}’ data.f
483 may 5PA1998 USP 37.00 KVM9D 644
5.使用grep匹配“与”或者“或”模式
-E:允许使用扩展模式匹配
grep -E ‘219|216’ data.f
219 DEC 2CC1999 CAD 23.00 PLV2C 68
216 sept 3ZL1998 USP 86.00 KVM9E 234
空行:
[开发]/usr/xxxx/ytcclb>grep ‘^$’ info.txt
[开发]/usr/xxxx/ytcclb>
匹配IP地址:
grep ‘[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}’ *.address 类
类名及其等价的正则表达式
—————————————————————————————
类 等价的正则表达式
[[:upper:]] [A-Z]
[[:lower:]] [a-z]
[[:digit:]] [0-9]
[[:alnum:]] [0-9a-zA-Z]
[[:space:]] 空格或tab键
[[:alpha:]] [a-zA-Z]
——————————————————————————————
系统grep命令
结合管道命令,|,将左边的输出结果作为右边命令的输入
查找目录列表中的列表:ls -l | grep ‘^d’
查询目录中不包含目录的所有文件:ls -l | grep ‘^[^d]’
[/home/xxxx/ytcxx]> ls -l | grep ‘^d…..x..x’
drwxr-xr-x 4 xxxx db2iadm1 256 Nov 15 2010 cdxx
drwxr-xr-x 2 xxxx db2iadm1 4096 Dec 6 2006 incl
drwxr-xr-x 2 xxxx db2iadm1 256 Nov 25 2010 src
drwxr-xr-x 2 xxxx db2iadm1 256 Nov 25 2010 tbin
drwxr-xr-x 3 xxxx db2iadm1 4096 Jul 5 2011 test
drwxr-xr-x 5 xxxx db2iadm1 256 Sep 10 2010 tmp
ps命令,查询洗头膏上运行的进程。
[/home/xxxx/ytcclb]> ps ax | grep “named”
376944 pts/0 A 0:00 grep named
[/home/xxxx/ytcclb]> ps -ef | grep “named”
xxxx 573474 557246 0 10:20:42 pts/0 0:00 grep named
字符串使用grep命令:
STR=”Mary Joe Peter Pauline”
echo $STR | grep “Mary”
Mary Joe Peter Pauline
egrep:expression或extended grep,接受所有的正则表达式。
egrep ‘(3ZL|2CC)’ data.f
219 DEC 2CC1999 CAD 23.00 PLV2C 68
216 sept 3ZL1998 USP 86.00 KVM9E 234