红联Linux门户
Linux帮助

AIX中grep命令介绍

发布时间:2014-08-03 21:49:13来源:linux网站作者:BOBO12082119

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