人生中应该有两次冲动,一次是轰轰烈烈的爱情,一次是说走就走的旅行。我属于第三种,轰轰烈烈的辞职然后马不停蹄的参加了马哥的linux面授班,两周时间内对linux有了些初步的了解,与此同时,两周内八天课程中的各种定义、概念、原理、命令由于量大、琐碎,也着实给我们这些小白一个下马威,即使每天11点撤退也觉得时间不够用。鉴于对自己的负责和马哥的作业要求,特对文本搜索工具grep写些使用指南,其中可能会有描述不确切或有偏颇之处,望及时指正。
开始…….
首先,要说一下grep是什么,用在什么地方。
grep是一个linux下的命令,全称为Globle search regular expression and print out the line,是一种文本搜索工具,其中这里所描述的“文本”即类似于windows操作系统下word、excel文档的一种东西,相信绝大多数人都在excel中点击过查找按钮,输入“某某”关键字,点击确定,最后刷刷刷的出来好多我们要找的东西。So,do you understand?
简单来说可以把Grep比作“查找”按钮,相信看到这你应该明白了,不过鉴于linux系统多数时间下使用的是命令行操作而不同于windows系统的图形化界面,所以,我们在linux中要通过小黑框输入各种命令(很高端大气上档次)后才能进入一个文本,所以说,在进入文本后也是使用命令来指挥翻页、查找、修改等等。这里的“查找”即grep命令,除了这个还有egrep、fgrep,这些就先做不做赘述。
了,明白了什么是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可取auto、always、never,
当使用grep–color=auto的时候,搜索出来的东西会自动以其他颜色显示出来以便用户加以区分,always与auto的区别是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/fstab中dev出现的次数
5、将/etc/fstab 中出现dev的行,忽略大小写
6、显示/etc/fstab 中的dev
以上就是grep的基本用法
接下来将是是grep和正则表达式结合的用法,是正!则!表!达!式!啊!
显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行
至于你看到的grep后面引号里面的是什么………以后有时间再解释……….推荐读《正则表达式30分钟入门教程》
下面说一下egrep和fgrep的用法
其实grep –E 和egrep是一个意思,但是还是有差异的,两者的区别:
1、 grep后接的正则表达式里面有转义符”\“而egrep中没有”\“(锚定符号除外);
举个栗子
我们还是显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行,这次用egrep
2、 egrep中可以使用a|b这种或者关系
再再举个栗子
显示当前系统上root、fedora或user1用户的默认shell
这就是egrep的用法,和grep只有谨小慎微的不同
最后一个fgrep,不支持正则表达式,仅用于速查,没什么可讲的。
以上为个人总结,语义如有歧义或描述不标准的地方,望指正。