1.说明

       


2.基本概念

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


           一般格式:


          grep [选项] 基本正则表达式 [文件]

//本文的测试用例

shell grep下面几行_shell

(2)常用的grep选项有:

-c 只输出匹配行的计数。

-i 不区分大小写(只适用于单字符)。

-h 查询多文件时不显示文件名。

-l 查询多文件时只输出包含匹配字符的文件名。

-n 显示匹配行及行号。

-s 不显示不存在或无匹配文本的错误信息。

-v 显示不包含匹配文本的所有行。

例:

1.行匹配(输只出匹配行的计数)

$ grep -c "48" data.f

$ 4

2.行数(显示匹配行及行号)

$ grep -n "48" data.f

shell grep下面几行_shell_02

(3)grep和正则表达式:

          双引号:在grep命令中输入字符串参数时,最好将其用双引号括起来。例如:“mystring”。

          //这样做有两个原因,一是以防被误解为 shell命令,二是可以用来查找多个单词组成的字符串,例如:“jet plane”,如果不用双引号将其括起来,那么单词 plane将被误认为是一个文件,查询结果将返回“文件不存在”的错误信息。

          //在调用变量时,也应该使用双引号,诸如:grep“$MYVAR”文件名,如果不这样,将没有返回结果。

          单引号:

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

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

例:

1.$grep '48[34]' data.f //483 484

shell grep下面几行_shell_03

2.$grep '^[^48]' data.f //行首不是48

shell grep下面几行_linux_04

3.$grep 'K...D' data.f  //抽取以L开头,以D结尾的所有代码,可使用下述方法,因为已知代码长度为5个字符

shell grep下面几行_正则表达式_05

4.$grep '[A-Z][A-Z]..C' data.f //头两个是大写字母,中间两个任意,并以C结尾

shell grep下面几行_shell grep下面几行_06

5.$grep '5..199[6,8]' data.f  //先查询所有以5开始以1996或1998结尾的所有记录。使用模式5..199[6,8]

shell grep下面几行_字符串_07

6.$grep '^[0-9][0-5][0-6]' data.f //以行首开始第一个字符为0到9之间,第二个字符在0到5之间,第三个字符在0到6之间

shell grep下面几行_shell grep下面几行_08

7.$grep -E '219|216' data.f   //匹配“与”或者“或”模式,grep命令加-E参数,这一扩展允许使用扩展模式匹配

shell grep下面几行_字符串_09

8.$grep 'conftroll\.conf' myfile //匹配特殊字符,查询文件名conftroll.conf

9.$grep '[0-9]\{3\}\.[0-9]\{3\}\.' ipfile  //查看nnn.nnn网络地址

10.类名

//grep允许使用国际字符模式匹配或匹配模式的类名形式

类名及其等价的正则表达式


[[:upper:]]

[A-Z] 

[[:lower:]]

[a-z]

[[:digit:]]

[0-9]  

[[:alnum:]]

[0-9a-zA-Z]

[[:space:]]

空格或tab键

[[:alpha:]]

[a-zA-Z]

$grep '5[[:upper:]][[:upper:]]' data.f

 

shell grep下面几行_shell_10

(4)查询多个文件

例:

1.如果要在当前目录下所有.doc文件中查找字符串“sort”,方法如下:

$ grep "sort"*.doc
2.或在所有文件中查询单词“sort it”
$ grep "sort it" *
(5)命令行输出结果作为grep的"输入"
          上诉的例子都是从文本文件抽取和过滤,下面的例子是以命令行输出作为操作对象。
$ps -ef | grep -v "grep" | grep "processname"
//目的:查看"processname"进程是否正在运行
//ps -ef,e:参数显示所以进程,f:全格式
//在grep命令中使用-v选项可丢弃ps命令中的grep进程

 

3.小结

          如果要通过文件快速查找字符串或模式,并打印包含模式的所有行,grep是一个很好的选择。