Linux Shell编程-grep

简介

grep允许对文本文件进行模式查找。如果找到匹配模式,grep打印包含模式的所有行。grep支持基本的正则表达式,也支持其扩展子集。

格式

grep [OPTIONS] PATTERN [FILE...]

grep选项

常用的grep选项有:
-c 只输出匹配行的计数。
-i 不区分大小写(只适用于单字符)。
-h 查询多文件时不显示文件名。
-l 查询多文件时只输出包含匹配字符的文件名。
-n 显示匹配行及行号。
-s 不显示不存在或无匹配文本的错误信息。
-v 显示不包含匹配文本的所有行。
下面列出了一个文本,可以配合上面的选项做一些练习时使用:
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

grep和正则表达式

使用正则表达式使模式匹配加入一些规则,因此可以在抽取信息中加入更多选择。使用正则表达式时最好用单引号括起来,这样可以防止grep中使用的专有模式与一些shell命令的特殊方式相混淆。
^ 只匹配行首
$ 只匹配行尾
* 只一个单字符后紧跟*,匹配0个或多个此单字符
[ ] 只匹配[ ]内字符。可以是一个单字符,也可以是字符序列。可以使用-表示[ ]内字符序列范围,如用[1-5]代替[12345]
\ 只用来屏蔽一个元字符的特殊含义。因为有时在s h e l l中一些元字符有特殊含义。\可以使其失去应有意义
. 只匹配任意单字符
pattern\{n\} 只用来匹配前面pattern出现次数。n为次数
pattern\{n,\}  只含义同上,但次数最少为n
pattern\{n,m\} 只含义同上,但pattern出现次数在n与m之间
特殊应用:
1. 匹配空行:结合使用^和$可以查询空行
2. 匹配特殊字符:查询有特殊含义的字符,诸如$ . ' " * [ ] ^ | \ + ?,必须在特殊字符前加\。
举例说明,匹配IPv4地址和查找网卡接口名所在的行:
bob@ubuntu10dot04:~$ ifconfig | grep '\([0-9]\{1,3\}\.\)\{3\}'
          inet addr:10.220.33.107  Bcast:10.220.33.255  Mask:255.255.255.0
          inet addr:127.0.0.1  Mask:255.0.0.0
bob@ubuntu10dot04:~$ ifconfig | grep 'eth0\|lo'
eth0      Link encap:Ethernet  HWaddr 00:0c:29:36:f2:73  
lo        Link encap:Local Loopback  

类名

grep运行使用国际字符模式匹配或匹配模式的类名形式,如下表所示
类		等价的正则表达式
----		----------------
[[:upper:]] 	[A-Z]
[[:alnum:]]	[0-9a-zA-Z]
[[:lower:]]	[a-z]
[[:space:]]	空格或tab键
[[:digit:]]	[0-9]
[[:alpha:]]	[a-zA-Z]

egrep

grep仅包含基本的正则表达式,如果需要支持更多正则表达式,可以选用egrep,其等同于"grep -E"。

参考资料

1.  Linux与Unix Shell编程指南
2.   grep egrep fgrep rgrep

你可能感兴趣的:(linux,grep)