Linux中文本搜索工具“grep”命令详解

人生中应该有两次冲动,一次是轰轰烈烈的爱情,一次是说走就走的旅行。我属于第三种,轰轰烈烈的辞职然后马不停蹄的参加了马哥的linux面授班,两周时间内对linux有了些初步的了解,与此同时,两周内八天课程中的各种定义、概念、原理、命令由于量大、琐碎,也着实给我们这些小白一个下马威,即使每天11点撤退也觉得时间不够用。鉴于对自己的负责和马哥的作业要求,特对文本搜索工具grep写些使用指南,其中可能会有描述不确切或有偏颇之处,望及时指正。

开始…….

首先,要说一下grep是什么,用在什么地方。

grep是一个linux下的命令,全称为Globle search regular expression and print out the line,是一种文本搜索工具,其中这里所描述的“文本”即类似于windows操作系统下wordexcel文档的一种东西,相信绝大多数人都在excel中点击过查找按钮,输入“某某”关键字,点击确定,最后刷刷刷的出来好多我们要找的东西。So,do you understand?

简单来说可以把Grep比作“查找”按钮,相信看到这你应该明白了,不过鉴于linux系统多数时间下使用的是命令行操作而不同于windows系统的图形化界面,所以,我们在linux中要通过小黑框输入各种命令(很高端大气上档次)后才能进入一个文本,所以说,在进入文本后也是使用命令来指挥翻页、查找、修改等等。这里的“查找”即grep命令,除了这个还有egrepfgrep,这些就先做不做赘述。

了,明白了什么是grep,下面就说说grep是怎么用的。

既然是linux下的文本搜索工具,首先就要先有个linux,然后进入linux系统,然后随便找个无关紧要的文本进去看看就是了,至于怎么进去的,自己google去,google上不去吗?那就度娘吧。

以下描述过程中的文件路径及文件请忽略,可以按这个一步一步来,也可以自己研究去。

进入系统后打开一个文件,比如说打开etc目录下的fstab文件,可以使用cat /etc/fstab这个命令,如图:

技术分享

看到了下面一堆的东西,这就是该文件里面的文本,grep就是查找这里面指定的东西,比如说查找里面的etc这个单词,或者”/”这个符号等等。

了解了以上所述,我们就可以使用grep这个命令来查找了!

grep命令是有使用格式要求的,我们可以用man命令查看一下grep的使用方法,至于怎么使用男人这个命令,自行度娘。

技术分享

上图SYNOPSIS中即为grep的使用格式

man一下这个命令会发现有很多的选项(OPTIONS),这些选项是可加可不加的

比如说grep --color=[WHEN],这里的WHEN可取autoalwaysnever

当使用grep–color=auto的时候,搜索出来的东西会自动以其他颜色显示出来以便用户加以区分,alwaysauto的区别是always会在任何情况下都给匹配字段加上颜色标记,而auto则只在输出到终端时才加上颜色,never是从来都不加颜色的意思。如果说不加上选项,即默认输出。

其他选项:

-a :将 binary 文件以 text 文件的方式搜寻数据

-c :计算找到搜寻字符串的次数

-i :忽略大小写的不同,所以大小写视为相同

-n :顺便输出行号

-v :反向选择,亦即显示出没有搜寻字符串内容的那一行

-o :只输出匹配部分

 

下面做几个例子就会明白了

1、将/etc/fstab文件中出现dev的行

技术分享

这里面显示出来的东西已经标红了,这是因为我已经让grep自动带上—color=auto了,如下图所示,大家不用管它。

技术分享

2、将/etc/fstab 出现dev的行,同时显示这些行在/etc/fstab的行号

技术分享

3/etc/fstab中,显示没有出现dev的行

技术分享

4、计算/etc/fstabdev出现的次数

技术分享

5、将/etc/fstab 出现dev的行,忽略大小写

技术分享

6、显示/etc/fstab 中的dev

技术分享

以上就是grep的基本用法

接下来将是是grep和正则表达式结合的用法,是正!则!表!达!式!啊!

技术分享

显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行

技术分享

至于你看到的grep后面引号里面的是什么………以后有时间再解释……….推荐读《正则表达式30分钟入门教程》

 

下面说一下egrepfgrep的用法

其实grep –E egrep是一个意思,但是还是有差异的,两者的区别:

1、  grep后接的正则表达式里面有转义符”\“egrep中没有”\“(锚定符号除外);

举个栗子

我们还是显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行,这次用egrep

技术分享

 

2、  egrep中可以使用a|b这种或者关系

再再举个栗子

显示当前系统上rootfedorauser1用户的默认shell

技术分享

这就是egrep的用法,和grep只有谨小慎微的不同

 

最后一个fgrep,不支持正则表达式,仅用于速查,没什么可讲的。

 

 

以上为个人总结,语义如有歧义或描述不标准的地方,望指正。


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。