在路上...

The development of life
我们一直都在努力,有您的支持,将走得更远...

站内搜索: Google

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 

                               grep 的使用

g r e p(全局正则表达式版本)允许对文本文件进行模式查找。如果找到匹配模式, g r e p打印包含模式的所有行。

grep


g r e p一般格式为:
grep [选项]基本正则表达式[文件]
这里基本正则表达式可为字符串。

双引号引用
在g r e p命令中输入字符串参数时,最好将其用双引号括起来。例如:“m y s t r i n g”。这样做有两个原因,一是以防被误解为s h e l l命令,二是可以用来查找多个单词组成的字符串,例如:“jet plane”,如果不用双引号将其括起来,那么单词p l a n e将被误认为是一个文件,查询结果将返回“文件不存在”的错误信息。在调用变量时,也应该使用双引号,诸如: g r e p“$ M Y VA R”文件名,如果不这样,将没有返回结果。

在调用模式匹配时,应使用单引号。

grep选项


常用的g r e p选项有:
-c          只输出匹配行的计数。
-i           不区分大小写(只适用于单字符)。
-h           查询多文件时不显示文件名。
-l            查询多文件时只输出包含匹配字符的文件名。
-n           显示匹配行及行号。
-s           不显示不存在或无匹配文本的错误信息。
-v           显示不包含匹配文本的所有行。

查询多个文件
如果要在当前目录下所有. d o c文件中查找字符串“ s o r t”,方法如下:

$ grep "sort"*.doc
或在所有文件中查询单词“ sort it”
$ grep "sort it" *
现在讲述在文本文件中g r e p选项的用法。

行匹配
$ grep -c "48"data.f
$ 4
g r e p返回数字4,意义是有4行包含字符串“4 8”,去掉-c 则会显示包含"48"的四行文本。

显示满足匹配模式的所有行行数:grep  -n "48" data.f

显示所有不包含4 8的各行: grep -v "48" data.f

使用g r e p抽取精确匹配的一种更有效方式是在抽取字符串后加\ >。假定现在精确抽取4 8,方法如下:grep "48\>" data.f

大小写敏感
缺省情况下, g r e p是大小写敏感的,如要查询大小写不敏感字符串,必须使用- i开关。在
d a t a . f文件中有月份字符S e p t,既有大写也有小写,要取得此字符串大小写不敏感查询,方法如下:

grep -i "sept"  data.f

grep和正则表达式


使用正则表达式使模式匹配加入一些规则,因此可以在抽取信息中加入更多选择。使用
正则表达式时最好用单引号括起来,这样可以防止g r e p中使用的专有模式与一些s h e l l命令的
特殊方式相混淆。

模式范围
假定要抽取代码为4 8 4和4 8 3的城市位置,上一章中讲到可以使用[ ]来指定字符串范围,这
里用4 8开始,以3或4结尾,这样抽出4 8 4或4 8 3。

grep '48[34]' data.f

不匹配行首
如果要抽出记录,使其行首不是4 8,可以在方括号中使用^记号,表明查询在行首开始。

grep '^[^48] data.f

使用grep匹配“与”或者“或”模式
g r e p命令加- E参数,这一扩展允许使用扩展模式匹配。例如,要抽取城市代码为2 1 9或2 1 6,方法如下:grep  -E  '219|216'  data.f

空行
结合使用^和$可查询空行。使用- n参数显示实际行数:  grep '^$' myfile

匹配特殊字符
查询有特殊含义的字符,诸如$ . ' " * [] ^ | \ + ? ,必须在特定字符前加\。假设要查询包含“.”
的所有行,脚本如下:grep   '  \.' myfile

类名

g r e p允许使用国际字符模式匹配或匹配模式的类名形式。


类                      等价的正则表达式           

[ [ : u p p e r : ] ]              [ A - Z ]            
[ [ : a l n u m : ] ]           [ 0 - 9 a - zA-Z]
[ [ : l o w e r : ] ]              [ a - z ]              
[ [ : s p a c e : ] ]           空格或t a b键
[ [ : d i g i t : ] ]              [ 0 - 9 ]              
[ [ : a l p h a : ] ]           [ a - z A - Z ]

系统grep命令
使用已学过的知识可以很容易通过g r e p命令获得系统信息。下面几个例子中,将用到管道命令,即符号|,使用它左边命令的输出结果作为它右边命令的输入。

如果要查询目录列表中的目录,方法如下:ls -l  | grep '^d'

如果在一个目录中查询不包含目录的所有文件,方法如下:ls -l | grep '^[^d]'

使用ps命令
使用带有ps x命令的g r e p可查询系统上运行的进程。ps x命令意为显示系统上运行的所有
进程列表。要查看D N S服务器是否正在运行(通常称为n a m e d),方法如下:ps ax  | grep "named"

posted on 2009-08-14 14:03  palam  阅读(137)  评论(0编辑  收藏  举报