软实力提升之道11------全面搜索正则表达式并把行打印出来

来源:互联网 发布:视频调色软件 编辑:程序博客网 时间:2024/04/30 01:51

软实力提升之道11------全面搜索正则表达式并把行打印出来

嗯,当你看到这样一个标题时有什么想法?一头雾水还是心中暗爽"幸亏我知道"。不管怎么样,这是软实力提升之道的又一篇文章,最近总觉得自己写的东西很浅显,很容易被高手鄙视,算了,罢了,本来就是小白,还是和需要的人一起提升软实力吧。

Global search Regular Expression and Print out the line,就是我们常说的GREP,也就是上面的那个标题。这个东东是个强大的文本搜索工具。在Linux和UNIX中广泛使用。

如果要说grep就要提一下它的兄弟:egrep、fgrep。grep和后面的程序基本相同,通过-E或者-E来调用后面的两个命令。

在古老的UNIX文本编辑器ED(这玩意儿诞生的时候中国的文化大革命还没高潮)中有个命令:

 

:g/re/p

 

这个命令的作用是通过搜索整个文件匹配给定正则表达式,并且把相应的行打印出来。ED是最早支持正则表达式的文本工具之一。它的作者ken. Thompson根据UC BERKLY的QED的思路发展而来。ED在文本编辑领域的影响力如此之大,它的后裔中vi,并影响了AWK和PERL的诞生。

 

基本原理

grep的工作过程一般分三步:

  • 1. 将一行文本读入模式空间
  • 2. 对模式空间中的文本进行正则表达是处理
  • 3. 针对匹配结果进行处理

grep的语法格式如下

 

grep [options] PATTERN [FILE...]

grep [options] [-e PATTERN | -f FILE] [FILE...]

 

如果我们想在fruit文件中搜索包含apple字符串的行。grep如下命令:

 

grep apple fruit

 

如果我们还想匹配Apple或者aPPle其它,就需要用到-i,表示ignore-case的意思,就是忽略大小写。

 

[root@vv grept]# cat fruit

applet

Applet

banana

Orange

Strawberry

[root@vv grept]# grep apple fruit

applet

[root@vv grept]# grep -i apple fruit

applet

Applet

 

 正则表达式元字符集包括基本集和扩展集。grep支持的是基本集。前面提到过的egrep支持扩展集。

 

元字符

说明

^

行首定位,指定行的头部。'^apple'匹配所有以apple开头的字符串

$

行尾定位,指定行的尾部。'apple$'匹配所有以apple结尾的字符串

.

匹配任意一个字符。'app.e'匹配apple、appoe或者其它。

*

匹配0个或者多个前导字符。学过闭包的应该知道。

[]

匹配[]中任意一个字符,'app[lo]e'会匹配apple或者appoe。

[^]

[]元字符相反

/< >/

词首定位和词首定位符,注意和^$的区别。下面有实例说明。

x/{m, n/}

m代表前导字符数量的下限,n代表下限

 

行首定位和词首定位的区别:

 

[root@vv grept]# cat fruit

applet

Applet

banana

Orange

Strawberry

aaaa pple

pple

[root@vv grept]# grep '^pple' fruit

pple

[root@vv grept]# grep '/<pple' fruit

aaaa pple

pple

[root@vv grept]#

 

这篇的重点在grep,所以正则表达式的内容就不多介绍了。

-#

同时显示匹配行的上下#行

 

[root@vv grept]# cat fruit

applet

Applet

banana

Orange

Strawberry

aaaa pple

pple

[root@vv grept]# grep -2 'banana' fruit

applet

Applet

banana

Orange

Strawberry

 

-l

grep匹配时,只打印匹配的文件名,不打印其中的行。

 

[root@vv grept]# grep -l 'banana' *

fruit

 

grep另外一个使用比较广泛的地方是用在管道中。比如显示某一进程。假设我们要显示vi进程的运行情况。

 

[root@vv grept]# ps aux | grep "vi"

root     29649  0.4  0.1   5228  1444 pts/1    T    20:22   0:00 vi

root     29693  0.0  0.0   4212   728 pts/1    S+   20:23   0:00 grep vi

 

grep在shell中的使用也很广泛。在shell中我们比较注意的就是grep的退出状态。通过下面的实例,就可以看到grep对退出状态有哪几种了。

 

[root@vv grept]# grep 'apple' fruit

applet

[root@vv grept]# echo $?

0

[root@vv grept]# grep 'applebbb' fruit

[root@vv grept]# echo $?

1

[root@vv grept]# grep 'applebbb' fruit2

grep: fruit2: No such file or directory

[root@vv grept]# echo $?

2

 

 

原创粉丝点击