MSN: Phenzer@hotmail.com 欢迎加为好友讨论测试

linux下使用最广泛的命令之一:grep

上一篇 / 下一篇  2010-11-08 17:32:11 / 个人分类:Linux

  grep是linux中使用最广泛的命令之一。它对文本按给定模式进行查找,如果找到匹配模式,就打印匹配模式的所有行。

1.grep的一般格式
grep [选项] 基本正则表达式 [文件]
调用字符串或变量时,应该使用双引号将其括起来;调用模式匹配时,应该使用单引号。

2.grep的选项
常用选项有:
-c   只输出匹配成功的行数
-i   不区分大小写
-h   查询多文件时不显示文件名。
-l   查询多文件时只输出包含匹配字符的文件
-n   显示匹配行及行号。
-s   不显示不存在或无匹配文本的错误信息。
-v   显示不包含匹配文本的所有行。

3.简单应用
在接下来的实例,若命令行中有data文件,则其内容(只有第2和6行是空行)如下:
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     89.00   KVM9E   234
4834    sept    2XL1992 USP     56.00   KEX9D   562
----end of file-----

(1)查找data文件中有几行包含数字48
[root@RHEL5 shell]# grep -c "48" data 
 5
[root@RHEL5 shell]# grep  "48" data   
48      Dec     3BC1997 LPSX    68.00   LVX2A   138
483     Sept    5AP1996 USP     65.00   LVX2C   189
484     nov     7PL1996 CAD     49.00   PLV2C   234
483     may     5PA1998 USP     37.00   KVM9D   644
4834    sept    2XL1992 USP     56.00   KEX9D   562

(2)显示行号
[root@RHEL5 shell]# grep -n "47" data 
4:47    Oct     3ZL1998 LPSX    43.00   KVM9D   512

(3)显示非匹配行
[root@RHEL5 shell]# grep -v "48" data 

47      Oct     3ZL1998 LPSX    43.00   KVM9D   512
219     dec     2CC1999 CAD     23.00   PLV2C   68

216     sept    3ZL1998 USP     89.00   KVM9E   234

(4)精确匹配
使用grep抽取精确匹配行是在被抽取字符串后加\>
[root@RHEL5 shell]# grep "48\>" data 
48      Dec     3BC1997 LPSX    68.00   LVX2A   138
(5)大小写不敏感
[root@RHEL5 shell]# grep -i "sePt" data 
483     Sept    5AP1996 USP     65.00   LVX2C   189
216     sept    3ZL1998 USP     89.00   KVM9E   234
4834    sept    2XL1992 USP     56.00   KEX9D   562

4.grep和正则表达式组合使用
(1)模式范围
抽取代码为484和483的城市位置:
[root@RHEL5 shell]# grep '48[34]' data 
483     Sept    5AP1996 USP     65.00   LVX2C   189
484     nov     7PL1996 CAD     49.00   PLV2C   234
483     may     5PA1998 USP     37.00   KVM9D   644
4834    sept    2XL1992 USP     56.00   KEX9D   562

(2)不匹配首行
抽取首行不是48的行:
[root@RHEL5 shell]# grep '^[^48]' data 
219     dec     2CC1999 CAD     23.00   PLV2C   68
216     sept    3ZL1998 USP     89.00   KVM9E   234

(3)匹配任意字符
抽取头2个是大写字母,中间是2个任意字符,并以C结尾:
[root@RHEL5 shell]# grep '[A-Z][A-Z]..C' data 
483     Sept    5AP1996 USP     65.00   LVX2C   189
219     dec     2CC1999 CAD     23.00   PLV2C   68
484     nov     7PL1996 CAD     49.00   PLV2C   234

(4)日期查询
抽取以5开始,后接2个任意字符,并以1996或1998结尾的行:
[root@RHEL5 shell]# grep '5..199[6,8]' data 
483     Sept    5AP1996 USP     65.00   LVX2C   189
483     may     5PA1998 USP     37.00   KVM9D   644

(5)范围组合
以行首开始,第一个字符是0-9,第二个是0-5,第三个是0-6:
[root@RHEL5 shell]# grep '^[0-9][0-5][0-6]' data 
216     sept    3ZL1998 USP     89.00   KVM9E   234

(6)模式出现几率
抽取数字4至少重复出现2次的行:
[root@RHEL5 shell]# grep '4\{2,\}' data 
483     may     5PA1998 USP     37.00   KVM9D   644
抽取数字9只重复出现3次的行:
[root@RHEL5 shell]# grep '9\{3\}' data  
219     dec     2CC1999 CAD     23.00   PLV2C   68
抽取9重复出现2次或3次,并以2个任意字符加CAD结尾的行:
[root@RHEL5 shell]# grep '9\{2,3\}..CAD' data 
219     dec     2CC1999 CAD     23.00   PLV2C   68
484     nov     7PL1996 CAD     49.00   PLV2C   234

(7)抽取空行
[root@RHEL5 shell]# grep -n '^$' data 
2:
6:

(8)使用ps
[root@RHEL5 shell]# ps -aux | grep "events"
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ
root         8  0.0  0.0      0     0 ?        S<   Oct14   0:58 [events/0]
root         9  0.0  0.0      0     0 ?        S<   Oct14   0:01 [events/1]
root     22927  0.0  0.1  61196   752 pts/2    S+   08:08   0:00 grep events





TAG: 实例 grep

 

评分:0

我来说两句

Open Toolbar